(原創)將Datatable數據按照Excel模板格式導出


最近遇到一個問題,就是導出數據的時候需要自定義的表頭,如圖

 

如果自己用代碼寫表頭的話,可能會有點復雜,而且代碼量很多,所以我就想了一個辦法,直接在Excel里面把表頭定義好,然后把數據寫入Excel模板里面,按模板格式導出。

需要引入的文件

NPOI組件:

還有就是這個,應該是用來壓縮的,而且需要注意的一點就是,版本一定要和配置里面的一致,不然會報錯

 

下面開始代碼實現:

首先創建一個Excelhelper類,里面實現了將Datatable數據寫入模板的邏輯代碼

 1   public class ExcelHelper : IDisposable
 2     {
 3 
 4         private string fileName = null; //文件名
 5         private IWorkbook workbook = null;
 6         private FileStream fs = null;
 7         private bool disposed;
 8         public ExcelHelper(string fileName)
 9         {
10             this.fileName = fileName;
11             disposed = false;
12         }
13 
14         /// <summary>
15         /// 將DataTable數據導入到excel中
16         /// </summary>
17         /// <param name="data">要導入的數據</param>
18         /// <param name="count">excel表中對應第一行數據的索引</param>
19         /// <param name="sheetName">要導入的excel的sheet的名稱</param>
20         /// <returns>導入數據行數(包含列名那一行)</returns>
21         public Stream DataTableToExcel(DataTable data, string sheetName, int count)
22         {
23            
24             ISheet sheet = null;
//導出的Excel存放路徑
25 string filePath = "C:\\" + DateTime.Now.Ticks + ".xlsx"; 26 fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); 27 if (fileName.IndexOf(".xlsx") > 0) // 2007版本 28 workbook = new XSSFWorkbook(fs); 29 else if (fileName.IndexOf(".xls") > 0) // 2003版本 30 workbook = new HSSFWorkbook(fs); 31 32 sheet = workbook.GetSheet(sheetName); 33 if (sheet == null) 34 sheet = workbook.GetSheetAt(0); 35 for (int k = 0; k < data.Rows.Count; k++) 36 { 37 IRow row = sheet.CreateRow(count + k); 38 for (int i = 0; i < data.Columns.Count; i++) 39 { 40 41 row.CreateCell(i).SetCellValue(data.Rows[k][i].ToString()); 42 } 43 44 } 45 46 using (Stream fswrite = new FileStream(filePath, FileMode.Create)) 47 { 48 49 workbook.Write(fswrite); 50 51 return fswrite; 52 } 53 54 } 55 56 57 58 public void Dispose() 59 { 60 Dispose(true); 61 GC.SuppressFinalize(this); 62 } 63 64 protected virtual void Dispose(bool disposing) 65 { 66 if (!this.disposed) 67 { 68 if (disposing) 69 { 70 if (fs != null) 71 fs.Close(); 72 } 73 74 fs = null; 75 disposed = true; 76 } 77 } 78 }

然后就可以直接用了

 ExcelHelper excelHepler = new ExcelHelper(System.AppDomain.CurrentDomain.BaseDirectory.Replace(@"bin\Debug\", @"Template\excel模板.xlsx"));
            excelHepler.DataTableToExcel(dt, "Sheet1", 3);

用的時候需要注意以下幾點,

1,實例化Excelheper類的時候需要傳入模板所在路徑

System.AppDomain.CurrentDomain.BaseDirectory.Replace(@"bin\Debug\", @"Template\excel模板.xlsx") 這句代碼就是為了獲得Excel模板所在路徑  

2,然后再調用里面的DataTableToExcel方法時需要傳入需要導出的Datatable和第一行數據所在行的索引

比如你的Excel模板中,前三行都是Title,那么你需要在第四行開始寫入數據,所以就應該傳入下標“3”

 

到此,就實現了導出數據到Excel模板功能,是不是非常簡單呢~O(∩_∩)O

 

本文內容為原創,轉載請注明出處!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM