我需要以编程方式创建一个包含 3 个工作表的 Excel 电子表格。
对于 Sheet1,我正在尝试导出一个 Gridview...及其所有格式...并且在不使用 Http.Response 的情况下执行此操作,因为该技术会强制弹出一个文件“保存/另存为”请求框,这似乎停止所有进一步的代码执行。
如果我能够成功地将我的 Gridview 直接写入 Excel 工作簿,我应该能够继续我的编码例程,然后重新打开文件并以编程方式添加表格 2 和 3。
这段代码工作......有点'......几乎!
private void ExportGridView(GridView myGrid)
{
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);
// Render grid view control.
myGrid.RenderControl(htw);
// Write the rendered content to a file.
string renderedGridView = sw.ToString();
File.WriteAllText("C:\\TimeSheets\\ExportedFile.xlsx", renderedGridView);
}
如果我停止编码...并导航到 TimeSheets 目录,我会看到“ExportedFile.xlsx”显示为“Microsoft Office Excel 2007 工作簿”,并且我的 Excel 程序在打开和显示格式正确的 Gridview 时没有问题。
但是,如果我继续使用 C# 进行编码并尝试在我的代码隐藏中打开同一个文件,则会收到“文件包含损坏的数据”错误。
如果在使用 Excel 查看“ExportedFile.xlsx”文件时,我执行“另存为”,我看到文件名放在引号中,并且文件类型默认为另存为网页 htm/html。如果我通过删除文件名中的引号并将文件类型设置为“.xlsx”来重置这些值......那么,可以在我的代码隐藏中读取生成的文件而无需抱怨。
谁能给我一个解决方案?
乔。