导出Excel报错
挨踢蜗牛 2013-02-19 11:15:10 有时可以导出,有时报一下错误,这是为啥??
错误地址:
错误时间:2013/2/19 11:07:25
所在IP:
错误信息:检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 8000401a。
错误详细:System.Runtime.InteropServices.COMException (0x8000401A): 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 8000401a。
在 System.Web.UI.WebControls.Button.OnClick(EventArgs e)
在 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
在 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
在 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
在 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
----------------------------------------------------------
导出Excel 方法
/// <summary>
/// 导出Excel
/// </summary>
/// <param name="dtTemp"></param>
public static void ExportCMB(System.Data.DataTable dtTemp, string ServerPath, string TextName, System.Web.UI.Page page)
{
// 定义要使用的Excel 组件接口
// 定义Application 对象,此对象表示整个Excel 程序
Application excelApp = null;
// 定义Workbook对象,此对象代表工作薄
Workbook workBook;
// 定义Worksheet 对象,此对象表示Execel 中的一张工作表
Worksheet ws = null;
//定义Range对象,此对象代表单元格区域
Range range;
int dcell = 1;
int colindex = 0;
int rowcount = dtTemp.Rows.Count;
int colcount = dtTemp.Columns.Count;
try
{
//初始化 Application 对象 excelApp
excelApp = new Application();
//在工作薄的第一个工作表上创建任务列表
workBook = excelApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
ws = (Worksheet)workBook.Worksheets[1];
// 命名工作表的名称为
ws.Name = "Sheet1";
//创建缓存
Object[,] objdata = new object[rowcount + 3, colcount];
//创建标题
foreach (System.Data.DataColumn dc in dtTemp.Columns)
{
objdata[0, colindex++] = dc.ColumnName;
}
//获取数据
for (int i = 0; i < rowcount; i++)
{
dcell = 0;
for (int j = 0; j < colcount; j++)
{
objdata[i + 1, dcell++] = dtTemp.Rows[i][dtTemp.Columns[j].ColumnName].ToString();
}
}
//写入Excel
range = ws.get_Range(excelApp.Cells[1, 1], excelApp.Cells[rowcount + 1, colcount]);
ws.get_Range(excelApp.Cells[2, 12], excelApp.Cells[rowcount + 1, 12]).NumberFormatLocal = "@";
range.Value2 = objdata;
range.Font.Size = 10;
//设置格式
excelApp.Cells.HorizontalAlignment = Constants.xlLeft; //全局左对齐
excelApp.Cells.EntireColumn.AutoFit();
range = ws.get_Range(excelApp.Cells[1, 1], excelApp.Cells[rowcount + 1, colcount]);
range.Borders.LineStyle = 1;
//显示 Excel
workBook.SaveCopyAs(ServerPath.Replace("//", "\\") + TextName + ".xlsx");
workBook.Close(false, null, null);
excelApp.Quit();
ws = null;
Utility.UploadExcel(ServerPath.Replace("//", "\\") + TextName + ".xlsx", page, true);
}
catch (Exception ex)
{
excelApp.Quit();
throw ex;
}
}