實現DataTable轉爲Excel文件,和上次分享的Excel文件轉爲DataTable互爲反操做。DataTable轉化爲Excel文件是經過傳入一個DataTable類型的參數,而後將傳入的DataTable轉化爲Excel文件。實現關鍵代碼以下:html
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 }