日期:2014-05-20  浏览次数:21010 次

C#编写的服务调用Excel时发生错误,向大家请教如何解决
在服务里面调用了Excel组件,结果发生了如下错误:
检索   COM   类工厂中   CLSID   为   {00024500-0000-0000-C000-000000000046}   的组件时失败,原因是出现以下错误:   80080005。
在Google里面查询后结果只有错误号为80070005的错误解决方法,请大家帮忙看看应如何解决该问题。

------解决方案--------------------
1. 以管理员身份登录到计算机,并使用完整安装来安装(或重新安装)Office。为了实现系统的可靠性,建议您将 Office CD-ROM 中的内容复制到本地驱动器并从此位置安装 Office。
2. 启动要自动运行的 Office 应用程序。这会强制该应用程序进行自我注册。
3. 运行该应用程序后,请按 Alt+F11 以加载 Microsoft Visual Basic for Applications (VBA) 编辑器。这会强制 VBA 进行初始化。
4. 关闭应用程序,包括 VBA。
5. 控制面板-》管理工具-?》组件服务-》计算机-。我的电脑-》DCOM-> 寻找
Microsoft Excel 97/2000/2002 - Microsoft Excel 应用程序

单击属性打开此应用程序的属性对话框。

6. 单击安全选项卡。验证使用默认的访问权限和使用默认的启动权限已选中。
7. 单击标识选项卡,然后选择交互式用户。
8. 单击确定,关闭属性对话框并返回主应用程序列表对话框。
9. 在 DCOM 配置对话框中,单击默认安全性选项卡。
10. 单击访问权限的编辑默认值。验证访问权限中是否列出下列用户,如果没有列出,则添加这些用户:
SYSTEM
INTERACTIVE
Everyone
Administrators
IUSR_ <machinename> *
IWAM_ <machinename> *

* 这些帐户仅在计算机上安装了 Internet Information Server (IIS) 的情况下才存在。
11. 确保允许每个用户访问,然后单击确定。
12. 单击启动权限的编辑默认值。验证启动权限中是否列出下列用户,如果没有列出,则添加这些用户:
SYSTEM
INTERACTIVE
Everyone
Administrators
IUSR_ <machinename> *
IWAM_ <machinename> *

* 这些帐户仅在计算机上安装有 IIS 的情况下才存在。
13. 确保允许每个用户访问,然后单击确定。


------解决方案--------------------
我也遇到过你的问题,也是用一楼的方法,在调试中不会出现问题,但是发布以后还是出现问题,我是WEBFORMS。
如果你只是简单的输出,你可以用以下方法,不打开EXCEL进程。
private void button6_Click(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "Execl files (*.xls)|*.xls ";
saveFileDialog.FilterIndex = 0;
saveFileDialog.RestoreDirectory = true;
saveFileDialog.CreatePrompt = true;
saveFileDialog.Title = "导出Excel文件到 ";

saveFileDialog.ShowDialog();

if (!String.IsNullOrEmpty(saveFileDialog.FileName))
{
Stream myStream;
myStream = saveFileDialog.OpenFile();
StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding( "gb2312 "));
string str = " ";
try
{
//写标题
for (int i = 0; i < this.sc_madanDataGridView.ColumnCount; i++)
{
if (sc_madanDataGridView.Columns[i].Visible == true)
{
if (i > 0)
{
str += "\t ";
}
str += sc_madanDataGridView.Columns[i].HeaderText;
}
}

sw.WriteLine(str);
//写内容
for (int j = 0; j < sc_madanDataGridView.Rows.Count; j++)
{
string tempStr = " ";
for (int k = 0; k < sc_madanDataGridView.Columns.Count; k++)
{
if (sc_madanDataGridView.Columns[k].Visible == true)
{
if (k > 0)
{
tempStr += "\t ";
}
tempStr += sc_madanDataGridView.Rows[j].Cells[k].FormattedValue.ToString();