.XLSX文件不生成具有多个8Klogging的工作表

我正在使用Excel 2007和OLE-DB提供程序来生成.xlsx文件。 这些文件有两张纸,第一张包含图表,第二张包含数据。

我正在使用以下连接string来生成excel:

using (OleDbConnection conn = new OleDbConnection ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Test.xlsx;Extended Properties=\"Excel 12.0 XML;HDR=Yes;IMEX=0\"")) 

该graphics使用Excel-Interop生成,然后closures工作簿。 接下来,开始一个新的工作stream程,打开相同的Excel文件并插入数据。

守则是这样的。

 using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strFilename + ";Extended Properties=\"Excel 12.0 XML;HDR=Yes;IMEX=0\"")) { clsCommon.LogMessages("Excel Connection opening"); conn.Open(); clsCommon.LogMessages("Connection opened."); using (OleDbCommand cmd_createTable = new OleDbCommand("CREATE TABLE [" + SheetName + "](" + sb.ToString() + ")", conn)) { cmd_createTable.ExecuteNonQuery(); //cmd_createTable.CommandTimeout = 14000; } clsCommon.LogMessages("Excel Sheet Created."); //write the data List<string> lstRowData = new List<string>(); string rowdata = string.Empty; foreach (DataRow row in dt.Rows) { for (int i = 0; i < dt.Columns.Count; i++) { if (row[i].ToString().Contains("'")) { rowdata = rowdata + "'" + row[i].ToString().Replace("'", "''") + "',"; } else { rowdata = rowdata + "'" + row[i].ToString() + "',"; } } rowdata = rowdata.Remove(rowdata.Length - 1, 1); lstRowData.Add(rowdata); rowdata = string.Empty; } #region Creating Single Command to execute multiple statements. using (OleDbCommand cmd_Insert = new OleDbCommand()) { clsCommon.LogMessages("Data Rows for Sheet:" + SheetName + ", is: " + lstRowData.Count.ToString()); cmd_Insert.Connection = conn; cmd_Insert.CommandTimeout = 14000; foreach (string item in lstRowData) { cmd_Insert.CommandText = "Insert into [" + SheetName + "$] values(" + item + ")"; cmd_Insert.ExecuteNonQuery(); } cmd_Insert.Dispose(); } #endregion conn.Close(); conn.Dispose(); } 

问题是,excel在具有较小数据量的工作表中正确生成。

对于数据量大于8k(大约)的工作表,上面的代码行正确地将数据写入excel,但是当文件被缓冲到网页时,大量logging的数据表不存在。

文件caching到网页的代码如下:

  Response.Clear(); Response.ClearContent(); Response.ClearHeaders(); Response.BufferOutput = true; Response.ContentType = "application/vnd.ms-excel"; Response.AppendHeader("Content-Disposition", string.Format("attachment; filename={0}", Path.GetFileName(newFilePath))); Response.WriteFile(newFilePath); if (Response.IsClientConnected) { Response.Flush(); } try { Response.Close(); HttpContext.Current.ApplicationInstance.CompleteRequest(); } catch { // Eat Exception } 

奇怪的事实:

相同的代码在我的本地开发环境下工作正常,所有的工作表都被正确填充。 我在我的机器和服务器上安装了Excel 2007。 我使用DCOMconfigurationpipe理器(在组件服务下)检查了服务器上的权限,它们看起来是正确的。

尝试变通办法

  • 1)更改了连接string

Extended Properties = \“Excel 12.0 XML; HDR = Yes; IMEX = 0 \”“))

Extended Properties = \“Excel 12.0; HDR = Yes; IMEX = 0 \”“))

没有运气。


你能帮我解决这个问题吗? 我是否需要在我的服务器上更改Excel 2007的某些设置以启用大量数据导出。

感谢您的快速帮助

– 沙拉布·古普塔

重要提示 : MS 不支持 Interop(用于代码中的第一个工作表)的服务器场景(如ASP.NET或类似的) 。

有很多选项可以在没有Interop的情况下读取/编辑/创buildExcel文件:

MS提供免费的OpenXML SDK V 2.0 – 请参阅http://msdn.microsoft.com/zh-cn/library/bb448854%28office.14%29.aspx (仅限XLSX)

这可以读取+写入MS Office文件(包括Excel)。

另一个免费的选项见http://www.codeproject.com/KB/office/OpenXML.aspx (仅限XLSX)

如果您需要处理较旧的Excel版本(如XLS,而不仅仅是XLSX),渲染,创buildPDF,公式等,那么您可能需要更多的免费和商业库,如ClosedXML (免费,仅限XLSX), EPPlus (免费,仅限XLSX) , Aspose.Cells , SpreadsheetGear , LibXL和Flexcel等。

我有超过6K的logging面临同样的问题,

.xlsx更改为.xls适用于我。