在C#,asp.net 4.0的项目,我创建使用的Microsoft.Office.Interop.Excel的Excel文件。该文件被正确创建并被放置在服务器上的文件夹中。但是,我一直无法想出将文件显示给客户端的方法。有人能帮我吗?如何将Excel文件下载到用户的下载文件夹?
一些背景:我试图解决的是从拦截了Excel文件的微软改变。我们的Web应用程序使用Telerik网格,并使用ExportToExcel函数将该网格导出到Excel文件。文件下载(转到用户的下载文件),但是当用户试图打开它时,他们会得到一个空白的Excel应用程序。有解决方法,例如卸载创建此问题的修补程序,关闭Excel安全选项,并单击文件属性中的解除阻止;但是,我们的客户不想做任何这些。所以我重写了40多个网格的出口。
我得到了来自radgrid控件的数据到DataTable,并使用此代码的工作就写入Excel中:
Microsoft.Office.Interop.Excel.Application m_objExcel = null;
Microsoft.Office.Interop.Excel.Workbooks m_objBooks = null;
Microsoft.Office.Interop.Excel._Workbook m_objBook = null;
Microsoft.Office.Interop.Excel.Sheets m_objSheets = null;
Microsoft.Office.Interop.Excel._Worksheet m_objSheet = null;
object m_objOpt = System.Reflection.Missing.Value;
m_objExcel = new Microsoft.Office.Interop.Excel.Application();
m_objBooks = (Microsoft.Office.Interop.Excel.Workbooks)m_objExcel.Workbooks;
m_objBook = (Microsoft.Office.Interop.Excel._Workbook)(m_objBooks.Add(m_objOpt));
m_objSheets = (Microsoft.Office.Interop.Excel.Sheets)m_objBook.Worksheets;
m_objSheet = (Microsoft.Office.Interop.Excel._Worksheet)(m_objSheets.get_Item(1));
int colcount = 1;
foreach (DataColumn col in dt.Columns)
{
m_objSheet.Cells[1, colcount] = col.ColumnName;
colcount++;
}
int rowcount = 2;
foreach (DataRow row in dt.Rows)
{
for (int i = 1; i < dt.Columns.Count; i++)
{
m_objSheet.Cells[rowcount, i] = row[i - 1].ToString();
}
rowcount++;
}
string currentDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
m_objBook.SaveAs("C:\\Temp\\MD" + currentDateTime + ".xlsx");
m_objBook.Close();
m_objExcel.DisplayAlerts = false;
m_objExcel.Quit();
我的问题是当我试图让用户下载该文件。我尝试了下面的代码,但是我得到一个错误,说“进程无法访问文件'C:\ Temp \ MD20160802161458.xlsx',因为它正在被另一个进程使用。”任何人都可以解释如何在通过Excel创建文件后取消阻止该文件,或者向我展示另一种将文件下载到用户的方式?
string fileName = "C:\\Temp\\MD" + currentDateTime + ".xlsx", myStringWebResource = null;
WebClient myWebClient = new WebClient();
myStringWebResource = fileName;
myWebClient.DownloadFile(myStringWebResource, fileName);
我也试过下面的代码打开Excel文件。该文件在服务器上创建,但从不打开。当我尝试打开服务器上的文件时,Excel崩溃。我怀疑这是因为我在开发计算机上安装了Excel 2013,而Excel 2007在服务器上。这引发了另一个问题,因为我无法保证最终生产服务器上的Excel版本是什么。任何建议,将不胜感激。
var excelApp = new Microsoft.Office.Interop.Excel.Application();
excelApp.Visible = true;
excelApp.Workbooks.Open("C:\\Temp\\MD" + currentDateTime + ".xlsx");
m_objExcel.Quit();
尝试使用不受MS修补程序影响的不同导出格式。我认为BIFF选项应该可行。 – rdmptn