實現DataTable轉為Excel文件,和上次分享的Excel文件轉為DataTable互為反操作。DataTable轉化為Excel文件是通過傳入一個DataTable類型的參數,然後將傳入的DataTable轉化為Excel文件。實現關鍵代碼如下: public void ToExcel(Da ...
實現DataTable轉為Excel文件,和上次分享的Excel文件轉為DataTable互為反操作。DataTable轉化為Excel文件是通過傳入一個DataTable類型的參數,然後將傳入的DataTable轉化為Excel文件。實現關鍵代碼如下:
public void ToExcel(DataTable dt) { #region 3s var FilePath = @"D:\ToExcel\";//產生Excel文件路徑 DeleteFile(FilePath); //創建全新的Workbook var workbook = new HSSFWorkbook();//一個sheet最多65536行 var count = 0; for (double i = 0; i < Convert.ToDouble(dt.Rows.Count) / Convert.ToDouble(65534); i++)//每個Excel文件的一個頁簽只能存放65536行數據 { var row_index = 0; //創建Sheet workbook.CreateSheet("Sheet" + i); //根據Sheet名字獲得Sheet對象 var sheet = workbook.GetSheet("Sheet" + i); IRow row; row = sheet.CreateRow(row_index); //寫入標題 for (int j = 0; j < dt.Columns.Count; j++) { row.CreateCell(j).SetCellValue(dt.Columns[j].Caption.ToString()); } row = sheet.CreateRow(++row_index); //寫入數據 for (int j = 0; j < (dt.Rows.Count - count > 65534 ? 65534 : dt.Rows.Count - count); j++) { var r = dt.Rows[j + count]; for (int k = 0; k <dt.Columns.Count; k++) { row.CreateCell(k).SetCellValue(r[k].ToString()); //如果是數字,判斷是否需要轉換為數字 //if (IsNumeric(r[k].ToString())) //{ // row.CreateCell(k).SetCellValue(Convert.ToDouble(r[k].ToString())); //} //else //{ // row.CreateCell(k).SetCellValue(r[k].ToString()); //} } row = sheet.CreateRow(++row_index); } count += row_index - 2; } //保存Workbook方式一: 以文件形式保存到伺服器中(每次導出都會生成一個文件,慎重使用) var FileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls"; var sw = File.Create(FilePath + FileName); workbook.Write(sw); sw.Close(); var EC = new ExcelConverter(); EC.WebopenExcel(Response, FilePath + FileName); #endregion }