這兩天做的導出報表的項目中,因為出現了一些問題所以對於excel一些方法參數有了一些認識,
首先:開始生成的是.xls格式的excel文件,但是某個sheet發現我本來dataTable的數據有8萬多行,但是sheet顯示只有65536行,查閱后發現Excel2007以下版本支持的sheet的最大行數就是65536。
Excel2003版最大行數是65536行。Excel2007開始的版本最大行數是1048576行。
Excel2003的最大列數是256列,2007以上版本是16384列。
有的小伙伴建議:創建一個新的sheet.
然后在循環導數據里加一個計數器,到65535就創建一個sheet,創建后置計數器為0.繼續導入.
參見:http://bbs.csdn.net/topics/250005454
但是更簡便的方案:如果本機服務器安裝office系統是2007以上,如office2013,則完全可以生成支持最大行數1,048,576的2007版本excel,后綴名為.xlsx
以下是經驗總結:
xbook.SaveAs(strFile, Type.Missing, "", "", Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, 1, false, Type.Missing, Type.Missing, Type.Missing);
代碼;
Application xApp = new Application(); xApp.DisplayAlerts = false; xApp.Visible = true;//讓后台執行設置為不可見,為true的話會打開excel看到數據在往里面寫 Workbook xbook; //xbook = xApp.Workbooks.Open(strFile, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); xbook = xApp.Workbooks.Add(Missing.Value);//添加一個工作薄采用缺省參數,會自動添加一個默認模板的工作表Sheet1 //xApp.DisplayAlerts = false; //如果想刪除某個sheet頁,首先要將此項設為fasle,,因工作薄內至少含有一張可視工作表,現不可刪除 //(xApp.ActiveWorkbook.Sheets[1] as Worksheet).Delete(); string FileDate; IT_Check_Report.Create(ref xbook, ref xApp, out FileDate); string strFile = strFilePath + "IT_Check_Report_Sheet" + FileDate + ".xlsx"; //int FormatNum; //string Version = xApp.Version;//獲取excel版本 //if (Convert.ToDouble(Version) < 12) //{ // FormatNum = -4243;//excel97-2003 //} //else //{ // FormatNum = 56;//excel2007 or later //} //xbook.SaveAs(strFile, FormatNum, "", "", Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, 1, false, Type.Missing, Type.Missing, Type.Missing); //xbook.SaveAs(strFile, XlFileFormat.xlWorkbookNormal, "", "", Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, 1, false, Type.Missing, Type.Missing, Type.Missing); //以下第二個參數是使用Type.Missing,即輸出系統中帶有的excel支持的格式 xbook.SaveAs(strFile, Type.Missing, "", "", Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, 1, false, Type.Missing, Type.Missing, Type.Missing); //xbook.Save(); xbook.Close(false, Missing.Value, Missing.Value); xbook = null; xApp.Quit(); xApp = null; GC.Collect();
SAVEAS方法 : 第二個參數使用xlWorkbookNormal則輸出的是xls格式,如果使用的是missing則輸出系統中帶有的EXCEL支持的格式
即:如果使用xlWorkbookNormal參數,但是后綴名是.xlsx,則不能打開文件,
詳解:
expression.SaveAs(FileName,FileFormat,Password,WriteResPassword,ReadOnlyRecommended,CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local)
expression 必需。該表達式返回上述對象中一個對象。
Filename Variant類型,可選。該字符串表示要保存的文件名。可包含完整路徑。如果不指定路徑,Microsoft Exce 將文件保存到當前文件夾中。
FileFormat Variant 類型,可選。保存文件時使用的文件格式。要得到有效選項的列表,請參閱 FileFormat 屬性。對於已有文件,其默認格式是上次指定的文件格式;對於新文件,默認格式為當前使用的 Excel 版本格式。
Password Variant 類型,可選。它是一個區分大小寫的字符串(最長不超過15個字符),用於指定文件的保護密碼。
WriteResPassword Variant類型,可選。該字符串表示文件的寫保護密碼。如果文件保存時帶有密碼,但打開文件時不輸入密碼,則該文件以只讀方式打開。
ReadOnlyRecommended Variant類型,可選。如果該值為True,則在打開文件時顯示一條信息,提示該文件以只讀方式打開。
CreateBackup Variant類型,可選。如果該值為True,則創建備份文件。
AccessMode XlSaveAsAccessMode類型,可選。
XlSaveAsAccessMode 可為以下 XlSaveAsAccessMode 常量之一。
xlExclusive (不含方式)
xlNoChange default (不更改訪問方式)
xlShared (共享列表)
如果省略此參數,則不會更改訪問方式。如果在沒有改變文件名的情況下保存共享列表,則可以忽略參數。若要改變訪問方式,請使用 ExclusiveAccess 方法。
ConflictResolution XlSaveConflictResolution 類型,可選。
XlSaveConflictResolution 可為以下 XlSaveConflictResolution 常量之一。
xlUserResolution (顯示沖突解決方案對話框)
xlLocalSessionChanges (自動接受本地用戶的修改)
xlOtherSessionChanges (接受除本地用戶之外的其他用戶的更改)
如果忽略本參數,則顯示沖突處理對話框。
AddToMru Variant 類型,可選。如果該值為True,則將該工作簿添加到最近使用的文件列表中。默認值為False。
TextCodePage Variant類型,可選。不在美國英語版的Microsoft Excel中使用。
TextVisualLayout Variant類型,可選。不在美國英語版的Microsoft Excel中使用。
Local Variant 類型,可選。如果該值為True,則以Microsoft Excel(包括控制面板設置)的語言保存文件。如果該值為False(默認值),則以Visual Basic for Applications (VBA) 的語言保存文件,其中 Visual Basic for Applications(VBA)為典型安裝的美國英語版本,除非VBA 項目中的Workbooks.Open來自舊的國際化的XL5/95 VBA項目。