导出到excel电子表格(XLSX)失败

本文关键字:XLSX 失败 电子表格 excel | 更新日期: 2023-09-27 18:04:39

. NET网页,我导出一些数据到excel电子表格(XLSX)。当我使用Visual Studio运行它时,代码运行良好(它正在导出具有正确数据的XLSX文件),但在部署到测试服务器时,相同的代码失败。

它不抛出任何错误,它只是导出一个空白的XLSX文件。

注意:在测试服务器中调试时,我发现数据正在被获取,临时文件也被正确创建,但数据没有被写入临时文件(奇怪的是它没有通过任何错误)。

后来添加

在做了更多的研究之后,我发现小的记录集(比如1000,2000)没有问题。但是当尝试使用~20K记录时,我得到一个空白文件。

过去两天我一直在燃烧自己,有人来救我:)…

string templateFile = @"C:'Templates'ExportFile.xlsx";
string tempFileName = Path.Combine(@"C:'Temp'", Path.GetRandomFileName());
tempFileName = Path.ChangeExtension(tempFileName, ".xlsx");
File.Copy(templateFile, tempFileName);
List<Customer> customerList = FetchCustomers();
DataTable dataTableObj = new DataTable("Customers$");
dataTableObj.Columns.Add(new DataColumn("CustomerID"));
dataTableObj.Columns.Add(new DataColumn("FirstName"));
dataTableObj.Columns.Add(new DataColumn("LastName"));
dataTableObj.Columns.Add(new DataColumn("CreatedDate"));
foreach (Customer customerObj in customerList)
{
    DataRow dataRowObj = dataTableObj.NewRow();
    dataRowObj["CustomerID"] = customerObj.CustomerID;
    dataRowObj["FirstName"] = customerObj.FirstName;
    dataRowObj["LastName"] = customerObj.LastName;
    dataRowObj["CreatedDate"] = customerObj.CreatedDate;
    dataTableObj.Rows.Add(dataRowObj);
}
using (OleDbConnection oleDbConnectionObj = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + tempFileName + ";Extended Properties='"Excel 12.0 Xml;HDR=YES;'""))
{
    OleDbCommand insertCommand = new OleDbCommand();
    insertCommand.Connection = oleDbConnectionObj;
    insertCommand.CommandText = @"INSERT INTO [Customers$] ([CustomerID], [FirstName], [LastName], [CreatedDate]) VALUES (?, ?, ?, ?)";
    insertCommand.Parameters.Add("CustomerID", OleDbType.Numeric, 0, "CustomerID");
    insertCommand.Parameters.Add("FirstName", OleDbType.VarChar, 0, "FirstName");
    insertCommand.Parameters.Add("LastName", OleDbType.VarChar, 0, "LastName");
    insertCommand.Parameters.Add("CreatedDate", OleDbType.Date, 0, "CreatedDate");
    DataSet dataSetObj = new DataSet();
    dataSetObj.Tables.Add(dataTableObj);
    OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
    dataAdapter.InsertCommand = insertCommand;
    dataAdapter.Update(dataSetObj, "Customers$");
}
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.Charset = "";
Response.AddHeader("Content-Disposition", "attachment; filename=Customers.xlsx");
Response.WriteFile(tempFileName);
Response.Flush();
Response.End();

导出到excel电子表格(XLSX)失败

终于解决了!!

在创建大型XLSX文件(大于~1MB)时,OLEDB Provider尝试在 Local Settings'Temporary Internet Files'Content.MSO' 为APP POOL帐户创建临时文件。如果文件夹不存在或APP POOL帐户没有适当的权限,那么它会失败而不会抛出错误(不知道为什么它不抛出错误)。//


在我的例子中,内容。MSO文件夹在C:'Documents and Settings'Default User'Local Settings'Temporary Internet Files.

我创建了文件夹,并给了NETWORK SERVICES.....修改权限和"瞧! -一切都开始工作了。



多亏了下面的两个链接,他们节省了我的时间…:)

Microsoft ACE OLEDB连接在有166,110行时创建空Excel

http://www.rapidsnail.com/developer/topic/2011/109/2/65194/excel -写-秘密-使用- oledb写数据到excel - -比- 13571 -线-文件- - - - - - - blank.aspx