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

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

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

...全文
121 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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版本和你的版本是不是不一样
具体内容请参考我的BLOG:http://blog.csdn.net/smallwhiteyt/archive/2009/11/08/4784771.aspx 如果你耐心仔细看完本文,相信以后再遇到导出EXCLE操作的时候你会很顺手觉得SO EASY,主要给新手朋友们看的,老鸟可以直接飘过了,花了一晚上的时间写的很辛苦,如果觉得对你有帮助烦请留言支持一下,我会写更多基础的原创内容来回报大家。 C#导出数据到EXCEL表格是个老生常谈的问题了,写这篇文章主要是给和我一样的新手朋友提供两种导出EXCEL的方法并探讨一下导出的效率问题,本文中的代码直接就可用,其中部分代码参考其他的代码并做了修改,抛砖引玉,希望大家一起探讨,如有不对的地方还请大家多多包涵并指出来,我也是个新手,出错也是难免的。 首先先总结下自己知道的导出EXCEL表格的方法,大致有以下几种,有疏漏的请大家补充。 1.数据逐条逐条的写入EXCEL 2.通过OLEDB把EXCEL做为数据源来写 3.通过RANGE范围写入多行多列内存数据到EXCEL 4.利用系统剪贴板写入EXCEL 好了,我想这些方法已经足够完成我们要实现的功能了,方法不在多,在精,不是么?以上4中方法都可以实现导出EXCEL,方法1为最基础的方法,意思就是效率可能不是太高,当遇到数据量过大时所要付出的时间也是巨大的,后面3种方法都是第一种的衍生,在第一种方法效率低下的基础上改进的,这里主要就是一个效率问题了,当然如果你数据量都很小,我想4种方法就代码量和复杂程度来说第1种基本方法就可以了,或当你的硬件非常牛逼了,那再差的方法也可以高效的完成也没有探讨的实际意义了,呵呵说远了,本文主要是在不考虑硬件或同等硬件条件下单从软件角度出发探讨较好的解决方案。

111,092

社区成员

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

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

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