【发布时间】:2015-02-10 09:29:21
【问题描述】:
我想在 asp.net 中创建 Excel 工作表。我已经为此编写了代码,并且在本地系统中运行良好,但是当我在服务器上对其进行测试时,它会出现以下错误。
检索 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败,原因是以下错误:80070005。
我的代码是。
private static System.Data.DataTable GetDataSet()
{
System.Data.DataTable dt = new System.Data.DataTable("Table");
dt.Columns.Add("Name", Type.GetType("System.String"));
dt.Columns.Add("Address", Type.GetType("System.String"));
dt.Columns.Add("Phone", Type.GetType("System.String"));
DataRow dr = dt.NewRow();
dr["Name"] = "Balaji Selvarajan";
dr["Address"] = "Reddiyur";
dr["Phone"] = "000-000-0000";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["Name"] = "Balaji S";
dr["Address"] = "Kattumannar Koil";
dr["Phone"] = "000-000-0000";
dt.Rows.Add(dr);
return dt;
}
private static void DataSetToExcel(System.Data.DataTable dt, Boolean generateIdentity)
{
try
{
string Filename = HttpContext.Current.Server.MapPath("~/Doc/") + "Test.xls";
string imagepath1 = HttpContext.Current.Server.MapPath("~/Doc/") + "Test.xls";
FileInfo fi = new FileInfo(HttpContext.Current.Server.MapPath("~/Doc/") + "Test.xls");
if (fi.Exists)
{
fi.Delete();
}
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
xlApp.Visible = false;
Microsoft.Office.Interop.Excel.Workbook wb = xlApp.Workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
object misValue = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.Add(misValue, misValue, misValue, misValue);
ws.Name = "Test";
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
if (i == 0)
ws.Cells[1, j + 1] = dt.Columns[j].ColumnName;
ws.Cells[i + 2, j + 1] = dt.Rows[i][j].ToString();
}
ws.Protect("1235", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true);
}
wb.Protect("my", true, true);
wb.Password = "1235";
wb.SaveAs(Filename, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, "1235", misValue, misValue, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
wb.Close(true, misValue, misValue);
xlApp.Visible = true;
xlApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
HttpContext.Current.Response.ContentType = "Application/Excel";
string FilePath = imagepath1;
HttpContext.Current.Response.WriteFile(FilePath);
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=Test.xls");
HttpContext.Current.Response.End();
}
catch (Exception ex)
{
throw ex;
}
}
protected void BtnDn_Click(object sender, EventArgs e)
{
DataSetToExcel(GetDataSet(), false);
}
我无法解决这个问题,请帮助我。请尽快给我解决方案。
我正在使用 Asp.net C#。
【问题讨论】:
-
在服务器上使用 Office(如来自 asp.net)是 not supported。有几个组件(也是免费软件)可以让您从 asp.net 生成 Excel 文件。
-
你能给我这些免费软件组件的 url 以生成 excel 文件吗
-
完全同意@HansKesting - 但也要确保如果您正在使用不受支持和错误的方法,COM 库已在服务器上注册。