Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .XLSX文件不是使用记录超过8K的工作表生成的_C#_Excel_Oledb_Excel Interop - Fatal编程技术网

C# .XLSX文件不是使用记录超过8K的工作表生成的

C# .XLSX文件不是使用记录超过8K的工作表生成的,c#,excel,oledb,excel-interop,C#,Excel,Oledb,Excel Interop,我正在使用Excel2007和OLE-DB提供程序生成.xlsx文件。这些文件有两张表,第一张是包含图形的表,第二张是包含数据的表 我正在使用以下连接字符串生成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=

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

我正在使用以下连接字符串生成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\""))
使用Excel Interop生成图形,然后关闭工作簿。随后,将启动一个新的工作流,该工作流将打开相同的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(); 
            }
奇怪的事实:

同样的代码在我的本地开发环境中运行良好,并且所有工作表都已正确填充。我的机器和服务器上都安装了Excel2007。 我已经使用DCOM配置管理器(在组件服务下)检查了服务器上的权限,它们看起来是正确的

已尝试解决方法

  • 1) 更改了连接字符串

扩展属性=\“Excel 12.0 XML;HDR=是;IMEX=0\”) 到

扩展属性=\“Excel 12.0;HDR=是;IMEX=0\“”) 没有运气


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

谢谢你的迅速帮助


--沙拉布·古普塔

重要的

有许多选项可以在不进行互操作的情况下读取/编辑/创建Excel文件:

MS提供免费的OpenXMLSDK2.0-请参阅(仅限XLSX)

可以读写MS Office文件(包括Excel)

另一个免费选项请参见(仅限XLSX)


如果您需要处理更旧的Excel版本(如XLS,而不仅仅是XLSX)、渲染、创建PDF、公式等,那么有不同的免费和商业库,如(免费,仅XLSX),(免费,仅XLSX),等等。

对于超过6k的记录,我面临同样的问题


.xlsx
更改为
.xls
对我来说很有效。

您展示了两个不同的处理阶段—文档创建和通过http提供。你能确定是哪一个导致了问题吗?文档创建是否需要一段时间,asp.net是否可以“超时”进程线程?嗨,Adrain,谢谢回复。这些文档似乎是正确创建的。通过查看日志文件,我发现所有10k记录都正确地添加到工作表中。只是当工作表被保存并通过Http重新打开时,本地MS office应用程序正在修剪/忽略该工作表,奇怪的是,所有其他工作表都在该excel上正确打开。嗨,Adrain,今天我刚刚尝试使用提供程序直接将10k记录插入到.xlsx中:使用(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\”),我得到了一张空白表作为响应。当我尝试插入300条记录时,文件创建正确。连接字符串是否有问题?
   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
   }