日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简单的Excel导出(两种方式)

發布時間:2023/11/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单的Excel导出(两种方式) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  最近項目里面有個周報Excel導出的功能,為了解決這個問題,我顯示調研Excel內核的方式實現了,但是被告知該方法有諸多弊端(1、服務器需要裝相應版本的Excel;2、如果程序中途出錯服務器會有很多Excel進程);最后用得aspose.cells第三方控件的方式完成。

一、Excel內核方式實現

  該方法首先需要添加引用Microsoft.Office.Interop.Excel;然后添加同名的using。具體數據插入的邏輯可以忽略,代碼如下

View Code 1 /// Excel導出 2 /// </summary> 3 /// <param name="tArys">數據源</param> 4 /// <param name="templetFileName">模板地址</param> 5 /// <param name="reportFileName">導出文件臨時地址</param> 6 public static void ExportWeeklyReport(object[] tArys, string templetFileName, string reportFileName) 7 { 8 //模板文件 9 string TempletFileName = templetFileName; 10 //導出文件 11 string ReportFileName = reportFileName; 12 13 string strTempletFile = Path.GetFileName(TempletFileName); 14 //將模板文件復制到輸出文件 15 FileInfo mode = new FileInfo(TempletFileName); 16 mode.CopyTo(ReportFileName, true); 17 18 //打開excel 19 object missing = Missing.Value; 20 Application app = null; 21 Workbook wb = null; 22 Worksheet ws = null; 23 Range r = null; 24 // 25 app = new Microsoft.Office.Interop.Excel.Application(); 26 wb = app.Workbooks.Open(ReportFileName, false, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing); 27 app.Visible = true; 28 29 //得到WorkSheet對象 30 ws = (Worksheet)wb.Worksheets.get_Item(2);//2代表第二個sheet 31 32 ////添加或修改WorkSheet里的數據 33 34 //定義一些需要計算的變量 35 int stafforganizedTotal = 0; 36 int staffonguardTotal = 0; 37 int staffontripTotal = 0; 38 int stafftemporaryTotal = 0; 39 string requiredtime = string.Empty; 40 41 ///把數據寫到Excel// 42 if (tArys != null) 43 { 44 for (int tis = 0; tis < tArys.Length; tis++) 45 { 46 47 object[,] tAry = (object[,])tArys[tis]; 48 for (int ti = 0; ti < tAry.GetLength(0); ti++) 49 { 50 string name = cls.toString(tAry[ti, 0]); 51 switch (name) 52 { 53 case "stafforganized": 54 stafforganizedTotal += cls.getNum(cls.toString(tAry[ti, 1])); 55 break; 56 case "staffonguard": 57 staffonguardTotal += cls.getNum(cls.toString(tAry[ti, 1])); 58 break; 59 case "staffontrip": 60 staffontripTotal += cls.getNum(cls.toString(tAry[ti, 1])); 61 break; 62 case "stafftemporary": 63 stafftemporaryTotal += cls.getNum(cls.toString(tAry[ti, 1])); 64 break; 65 case "requiredtime": 66 requiredtime = cls.toString(tAry[ti, 1]); 67 break; 68 case "content": 69 ws.Cells[10 + tis, 5] = cls.toString(tAry[ti, 1]); 70 break; 71 case "plan": 72 ws.Cells[25 + tis, 5] = cls.toString(tAry[ti, 1]); 73 break; 74 case "responsibleperson": 75 ws.Cells[25 + tis, 12] = cls.toString(tAry[ti, 1]); 76 break; 77 default: 78 break; 79 } 80 81 } 82 83 } 84 ws.Cells[6, 6] = stafforganizedTotal; 85 ws.Cells[6, 8] = staffonguardTotal; 86 ws.Cells[6, 10] = staffontripTotal; 87 ws.Cells[6, 12] = stafftemporaryTotal; 88 ws.Cells[4, 11] = requiredtime; 89 } 90 91 92 93 //輸出Excel文件并退出 94 wb.Save(); 95 wb.Close(null, null, null); 96 app.Workbooks.Close(); 97 app.Application.Quit(); 98 app.Quit(); 99 100 System.Runtime.InteropServices.Marshal.ReleaseComObject(ws); 101 System.Runtime.InteropServices.Marshal.ReleaseComObject(wb); 102 System.Runtime.InteropServices.Marshal.ReleaseComObject(app); 103 104 ws = null; 105 wb = null; 106 app = null; 107 108 109 }

?

二、aspose.cell方式實現

  該方法需要第三方控件的支持,可以在csdn上直接搜索下載,也可以購買。官網上有很多例子,我這個只是最最基礎的。具體代碼如下。(記得加引用后加using)

View Code 1 /// <summary> 2 /// 生成Excel到指定目錄 3 /// </summary> 4 /// <param name="tArys"></param> 5 /// <param name="regulardatetext"></param> 6 public static void ExportWeeklyReport(object[] tArys, string templetFileName, string reportFileName) 7 { 8 9 10 /////參考Aspose.Cells官網的例子http://www.aspose.com/demos/.net-components/aspose.cells/csharp/quick-start/data/hello-world.aspx 11 12 //打開excel 13 14 Workbook wb = new Workbook(templetFileName);//打開對應地址的excel模板 15 Worksheet ws = wb.Worksheets[1];//第二個sheet,從0開始 16 Cells cells = ws.Cells;//獲取對應的cells 的引用 17 18 ////定義幾個需要計算的變量 19 int stafforganizedTotal = 0; 20 int staffonguardTotal = 0; 21 int staffontripTotal = 0; 22 int stafftemporaryTotal = 0; 23 string requiredtime = string.Empty; 24 25 ///把數據寫到Excel// 26 if (tArys != null) 27 { 28 for (int tis = 0; tis < tArys.Length; tis++) 29 { 30 31 object[,] tAry = (object[,])tArys[tis]; 32 for (int ti = 0; ti < tAry.GetLength(0); ti++) 33 { 34 string name = cls.toString(tAry[ti, 0]); 35 switch (name) 36 { 37 case "stafforganized": 38 stafforganizedTotal += cls.getNum(cls.toString(tAry[ti, 1])); 39 break; 40 case "staffonguard": 41 staffonguardTotal += cls.getNum(cls.toString(tAry[ti, 1])); 42 break; 43 case "staffontrip": 44 staffontripTotal += cls.getNum(cls.toString(tAry[ti, 1])); 45 break; 46 case "stafftemporary": 47 stafftemporaryTotal += cls.getNum(cls.toString(tAry[ti, 1])); 48 break; 49 case "requiredtime": 50 requiredtime = cls.toString(tAry[ti, 1]); 51 break; 52 case "content": 53 cells[9 + tis, 4].PutValue(cls.toString(tAry[ti, 1]), true); 54 break; 55 case "plan": 56 cells[24 + tis, 4].PutValue(cls.toString(tAry[ti, 1]), true); 57 break; 58 case "responsibleperson": 59 cells[24 + tis, 11].PutValue(cls.toString(tAry[ti, 1]), true); 60 break; 61 default: 62 break; 63 } 64 65 } 66 67 } 68 cells[5, 5].PutValue(stafforganizedTotal); 69 cells[5, 7].PutValue(staffonguardTotal); 70 cells[5, 9].PutValue(staffontripTotal); 71 cells[5, 11].PutValue(stafftemporaryTotal); 72 cells[3, 10].PutValue(requiredtime); 73 74 } 75 76 77 78 79 //保存到相應的路徑 80 wb.Save(reportFileName); 81 82 83 84 }

轉載于:https://www.cnblogs.com/chuanzhifeng/archive/2012/11/13/2768102.html

總結

以上是生活随笔為你收集整理的简单的Excel导出(两种方式)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。