C# Excel

liangzhl 2010-03-09 04:46:40
有人知道这是什么问题吗?

引用EXCEL,安装完软件,在按导入EXCEL的按钮后出现这样的错误提示框
Error:Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046}
failed due to the following error:80076ba. line:mscorlib

是什么原因啊,我调试的时候可以的,没问题,可是到安装到客户那里后就会出现????

可以马上解决的在加分,急急急~~~~~~~~~

...全文
117 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangzhl 2010-03-09
  • 打赏
  • 举报
回复
楼上的我也试过了,其实都一样,我就是原来用和你一样的方法出现这样的问题,后来改用引用,还是这样的错误提示。

5lou zhenque
jsnjlhb 2010-03-09
  • 打赏
  • 举报
回复
由于客户端版本的原因可能导致EXCEL不能正常使用
我之前也遇到过,后来上网搜了一下,可以使用“晚期绑定EXCEL”办法,其实就是动态的调用客户端的EXCEL版本,不采用引用的方式

/// <summary>
/// 把DataTable的数据导出到Excel文件中
/// </summary>
/// <param name="fileName">Excel文件名</param>
/// <param name="dataTable">要导出的数据表</param>
/// <param name="errorInfo">操作出错信息</param>
/// <returns>是否导出成功</returns>
public static bool GenerateExcel(string fileName, DataTable dataTable, out string errorInfo)
{
errorInfo = null;

object objApp;
object objBook;
object objBooks;
object objSheets;
object objSheet;
object objCells;
object[] Parameters;

if (dataTable == null || dataTable.Rows.Count == 0)
{
return true;
}

try
{
// 获取Excel类型并建立其实例
Type objExcelType = Type.GetTypeFromProgID("Excel.Application");
if (objExcelType == null)
{
return false;
}
objApp = Activator.CreateInstance(objExcelType);
if (objApp == null)
{
return false;
}
//获取Workbook集
objBooks = objApp.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, objApp, null);

//添加一个新的Workbook
objBook = objBooks.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, objBooks, null);

//获取Sheet集
objSheets = objBook.GetType().InvokeMember("Worksheets", BindingFlags.GetProperty, null, objBook, null);

//获取第一个Sheet对象
Parameters = new Object[1] { 1 };
objSheet = objSheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, objSheets, Parameters);

try
{
//写入表头信息
for (int i = 0; i < dataTable.Columns.Count; i++)
{
Parameters = new Object[2] { 1, i + 1 };
objCells = objSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty, null, objSheet, Parameters);
//向指定单元格填写内容值
Parameters = new Object[1] { dataTable.Columns[i].Caption };
objCells.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, objCells, Parameters);
}
//写入表中数据内容
for (int i = 0; i < dataTable.DefaultView.Count; i++)
{
for (int col = 0; col < dataTable.Columns.Count; col++)
{
Parameters = new Object[2] { i + 2, col + 1 };
objCells = objSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty, null, objSheet, Parameters);
//向指定单元格填写内容值
Parameters = new Object[1] { dataTable.DefaultView[i][col].ToString() };
objCells.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, objCells, Parameters);
}
}
}
catch (Exception operExce)
{
errorInfo = operExce.Message;
return false;
}
finally
{
//不提示保存
Parameters = new Object[1] { false };
objApp.GetType().InvokeMember("DisplayAlerts", BindingFlags.SetProperty, null, objApp, Parameters);

//保存文件并退出
Parameters = new Object[1] { fileName };
objBook.GetType().InvokeMember("SaveAs", BindingFlags.InvokeMethod, null, objBook, Parameters);
objApp.GetType().InvokeMember("Quit", BindingFlags.InvokeMethod, null, objApp, null);
}
return true;
}
catch (Exception appExce)
{
errorInfo = appExce.Message;
return false;
}
}

你可以试试
vssvss 2010-03-09
  • 打赏
  • 举报
回复
用COM编程调用EXCEL,对齐office的版本要求要开发机的一样, 要不然会出问题的 我深有体会
liangzhl 2010-03-09
  • 打赏
  • 举报
回复
对了,我做的这个是Win的,不是网页的
liangzhl 2010-03-09
  • 打赏
  • 举报
回复
我把客户的EXCEL卸了,装了个和我自己一样的,装好后还是这样啊,晕哦
liangzhl 2010-03-09
  • 打赏
  • 举报
回复
楼上的

如果是2000 server 则 在弹出的窗口中选中 Microsoft Excel 应用程序 ,点击属性,然后依次点中自定义配置->添加->显示用户->aspnet ,注意最后一项选中完全控制即完成设置.

我用的是SQL2000的,那么上面这个是在哪里?
qqzeng-ip 2010-03-09
  • 打赏
  • 举报
回复
在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"


如果是2000 server 则 在弹出的窗口中选中 Microsoft Excel 应用程序 ,点击属性,然后依次点中自定义配置->添加->显示用户->aspnet ,注意最后一项选中完全控制即完成设置.

3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"

4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应用程序属性"对话框

5:点击"标识"标签,选择"交互式用户"

6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限.

7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限.

qqzeng-ip 2010-03-09
  • 打赏
  • 举报
回复
对服务器上的文件的操作权限不够所引起的错误,要配置DCOM.
guojun850103 2010-03-09
  • 打赏
  • 举报
回复
就是excel 安装问题,注册表中键值错误
kyoybs 2010-03-09
  • 打赏
  • 举报
回复
看看客户的excel版本和你的版本是不是不一样

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧