C# 往excel出力数据
生活随笔
收集整理的這篇文章主要介紹了
C# 往excel出力数据
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1 /// <summary>
2 /// 出力Excel
3 /// </summary>
4 /// <param name="storeModelForExcel"></param>
5 public void GenerateExcel(List<ExcelModel> excelModelList,string savePath)
6 {
7 Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
8 if (excel == null)
9 {
10 return;
11 }
12 //設(shè)置為不可見,操作在后臺(tái)執(zhí)行,為 true 的話會(huì)打開 Excel
13 excel.Visible = false;
14 //打開時(shí)設(shè)置為全屏顯式
15 //excel.DisplayFullScreen = true;
16 //初始化工作簿
17 Microsoft.Office.Interop.Excel.Workbooks workbooks = excel.Workbooks;
18 //新增加一個(gè)工作簿,Add()方法也可以直接傳入?yún)?shù) true
19 Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
20 var tt = workbook.Worksheets.Count;
21 try
22 {
23 for (int sheetNum = 0; sheetNum < excelModelList.Count; sheetNum++)
24 {
25 Microsoft.Office.Interop.Excel.Range range;
26 for (int k = 0; k < tt; k++)
27 {
28 //設(shè)置表的名稱
29 Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[k + 1];
30 worksheet.Name = excelModelList[sheetNum].dt.TableName;
31 range = worksheet.get_Range("A1", System.Reflection.Missing.Value);
32 range.NumberFormat = "@";
33 range = range.get_Resize(excelModelList[sheetNum].dt.Rows.Count + 1, excelModelList[sheetNum].dt.Columns.Count);
34 string[,] saRet = new string[excelModelList[sheetNum].dt.Rows.Count + 1, excelModelList[sheetNum].dt.Columns.Count];
35 //設(shè)置列名
36 for (int i = 0; i < excelModelList[sheetNum].dt.Columns.Count; i++)
37 {
38 //設(shè)置第一行,即列名
39 saRet[0, i] = excelModelList[sheetNum].dt.Columns[i].ColumnName;
40 }
41 //跳過第一行,第一行寫入了列名
42 int rowIndex = 1;
43 //寫入數(shù)據(jù)
44 for (int i = 0; i < excelModelList[sheetNum].dt.Rows.Count; i++)
45 {
46 for (int j = 0; j < excelModelList[sheetNum].dt.Columns.Count; j++)
47 {
48 saRet[rowIndex + i, j] = excelModelList[sheetNum].dt.Rows[i][j].ToString();
49 }
50 }
51 range.set_Value(System.Reflection.Missing.Value, saRet);
52 //設(shè)置所有列寬為自動(dòng)列寬
53 //worksheet.Columns.AutoFit();
54 //設(shè)置所有單元格列寬為自動(dòng)列寬
55 worksheet.Cells.Columns.AutoFit();
56 }
57 //新增加一個(gè) Excel 表(sheet)
58 if (sheetNum < excelModelList.Count - 1)
59 {
60 workbook.Worksheets.Add();
61 }
62 }
63 //是否提示,如果想刪除某個(gè)sheet頁,首先要將此項(xiàng)設(shè)為fasle。
64 excel.DisplayAlerts = false;
65 //保存寫入的數(shù)據(jù),這里還沒有保存到磁盤
66 workbook.Saved = true;
67 ////創(chuàng)建文件
68 FileStream file = new FileStream(savePath, FileMode.CreateNew);
69 //關(guān)閉釋放流,不然沒辦法寫入數(shù)據(jù)
70 file.Close();
71 file.Dispose();
72 ////保存到指定的路徑
73 workbook.SaveCopyAs(savePath);
74 workbook.Close(Type.Missing, Type.Missing, Type.Missing);
75 excel.Quit();
76 //關(guān)閉進(jìn)程,防止啟動(dòng)多個(gè),導(dǎo)致內(nèi)存溢出
77 IntPtr t = new IntPtr(excel.Hwnd);
78 int processId = 0;
79 GetWindowThreadProcessId(t, out processId);
80 System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(processId);
81 p.Kill();
82 }
83 catch (Exception e)
84 {
85 throw e;
86 }
87 }
88
89 [DllImport("User32.dll", CharSet = CharSet.Auto)]
90 public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
注意:數(shù)據(jù)先寫到內(nèi)存saRet,在一次性寫進(jìn)sheet
range.set_Value(System.Reflection.Missing.Value, saRet);轉(zhuǎn)載于:https://www.cnblogs.com/dehuachenyunfei/p/exportExcel.html
總結(jié)
以上是生活随笔為你收集整理的C# 往excel出力数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CF100015C
- 下一篇: C#构造函数、私有构造函数、静态构造函数