You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							87 lines
						
					
					
						
							3.9 KiB
						
					
					
				
			
		
		
	
	
							87 lines
						
					
					
						
							3.9 KiB
						
					
					
				using KGIS.Plugin.LayerProperty.Utils; | 
						|
using System; | 
						|
using System.Collections.Generic; | 
						|
using System.Data; | 
						|
using System.Linq; | 
						|
using System.Runtime.InteropServices; | 
						|
using System.Text; | 
						|
using System.Threading.Tasks; | 
						|
 | 
						|
namespace KGIS.Plugin.LayerProperty.Helper | 
						|
{ | 
						|
    public class ExportExcel | 
						|
    { | 
						|
 | 
						|
        public static void CreateAndAddTitle(string filePath, string sheetName, List<DataColumnEx> lstDataColumnEx, DataTable dtData) | 
						|
        { | 
						|
            Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); | 
						|
            Microsoft.Office.Interop.Excel.Workbook workbook = excel.Workbooks.Add(true); | 
						|
            Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1]; | 
						|
            worksheet.Name = sheetName; | 
						|
            int colIndex = 0; | 
						|
            foreach (DataColumnEx col in lstDataColumnEx) | 
						|
            { | 
						|
                colIndex++; | 
						|
                worksheet.Cells[1, colIndex] = col.ChineseName; | 
						|
            } | 
						|
            SetFormat(worksheet, lstDataColumnEx, 2, dtData.Rows.Count); | 
						|
            AddRangeData(worksheet, dtData, 2); | 
						|
            Marshal.ReleaseComObject(worksheet); | 
						|
            excel.DisplayAlerts = false; | 
						|
            workbook.SaveCopyAs(filePath); | 
						|
            workbook.Close(false, null, null); | 
						|
            Marshal.ReleaseComObject(workbook); | 
						|
            excel.Workbooks.Close(); | 
						|
            workbook = null; | 
						|
        } | 
						|
 | 
						|
        private static void SetFormat(Microsoft.Office.Interop.Excel.Worksheet worksheet, List<DataColumnEx> lstDataColumnEx, int startRow, int rowNumber) | 
						|
        { | 
						|
            int colIndex = 0; | 
						|
            foreach (DataColumnEx col in lstDataColumnEx) | 
						|
            { | 
						|
                colIndex++; | 
						|
                if (col.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeString) | 
						|
                { | 
						|
                    Microsoft.Office.Interop.Excel.Range range = worksheet.get_Range(worksheet.Cells[startRow, colIndex], worksheet.Cells[rowNumber + startRow - 1, colIndex]); | 
						|
                    range.NumberFormatLocal = "@"; | 
						|
                } | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        public static void AddRangeData(Microsoft.Office.Interop.Excel.Worksheet worksheet, DataTable dtData, int startRow, bool isAddBK = false) | 
						|
        { | 
						|
            int rowNumber = dtData.Rows.Count; | 
						|
            int columnNumber = dtData.Columns.Count; | 
						|
            object[,] objData = new object[rowNumber, columnNumber]; | 
						|
            for (int r = 0; r < rowNumber; r++) | 
						|
            { | 
						|
                for (int c = 0; c < columnNumber; c++) | 
						|
                { | 
						|
                    objData[r, c] = dtData.Rows[r][c]; | 
						|
                } | 
						|
            } | 
						|
            Microsoft.Office.Interop.Excel.Range range = worksheet.get_Range(worksheet.Cells[startRow, 1], worksheet.Cells[rowNumber + startRow - 1, columnNumber]); | 
						|
            if (isAddBK) | 
						|
            { | 
						|
                range.Borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous; | 
						|
                //for (int i = startRow; i < rowNumber + startRow; i++) | 
						|
                //{ | 
						|
                //    for (int j = 1; j < columnNumber + 1; j++) | 
						|
                //    { | 
						|
                //        ((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[i, j]).Borders.get_Item(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous; | 
						|
                //        ((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[i, j]).Borders.get_Item(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeRight).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous; | 
						|
                //        ((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[i, j]).Borders.get_Item(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous; | 
						|
                //    } | 
						|
                //} | 
						|
            } | 
						|
            range.Value2 = objData; | 
						|
        } | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
    } | 
						|
 | 
						|
}
 | 
						|
 |