c# 调用excle 错误 HRESULT: 0x800A03EC 如何解决

black1022 2009-10-26 11:06:31
源码信息:
protected void Button1_Click(object sender, EventArgs e)
{
Microsoft.Office.Interop.Excel.ApplicationClass myExcel = new Microsoft.Office.Interop.Excel.ApplicationClass();
if (myExcel == null)
{
Response.Write("无法创建Excel对象,可能您的电脑未安装Excel!");

}

Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();

//新建工作簿

Microsoft.Office.Interop.Excel.Workbook workBook = excelApp.Workbooks.Add(true);

//新建工作表

Microsoft.Office.Interop.Excel.Worksheet ws = workBook.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;
Object missing = System.Reflection.Missing.Value;
//try
//{
ws.SaveAs("c:\\temp.xls", missing, missing, missing, missing, missing, missing, missing, missing, missing);
//}
//catch(Exception ex)
//{
//System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.CurrentCulture;

//Response.Write(ex.Message+"********"+ci.Name.ToString());
//}
ws.get_Range(ws.Cells[1, 1], ws.Cells[1, 3]).Value2 = "sssss";

//ws.Quit();
}








错误信息:

Exception from HRESULT: 0x800A03EC
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Runtime.InteropServices.COMException: Exception from HRESULT: 0x800A03EC

源错误:


行 41: //try
行 42: //{
行 43: ws.SaveAs("c:\\temp.xls", missing, missing, missing, missing, missing, missing, missing, missing, missing);
行 44: //}
行 45: //catch(Exception ex)


[COMException (0x800a03ec): Exception from HRESULT: 0x800A03EC]
Microsoft.Office.Interop.Excel._Worksheet.SaveAs(String Filename, Object FileFormat, Object Password, Object WriteResPassword, Object ReadOnlyRecommended, Object CreateBackup, Object AddToMru, Object TextCodepage, Object TextVisualLayout, Object Local) +0
NewExcle.Button1_Click(Object sender, EventArgs e) in d:\Downloads\WebSite1\NewExcle.aspx.cs:43
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +115
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +140
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +29
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2981
...全文
14016 33 打赏 收藏 举报
写回复
33 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
liyoung1991 2012-08-02
我出现的这个问题。。我把生成的文件名改了一下 就好了。。。
  • 打赏
  • 举报
回复
black1022 2011-10-17
这个是权限的问题.iis用户没有权限操作OFFICE组件,Microsoft Visual Studio 2008 是系统用户启动有权限操作
  • 打赏
  • 举报
回复
dpcrman1987 2011-08-26
好像是单元格转换的问题 我这一直有问题
  • 打赏
  • 举报
回复
black1022 2011-05-13
那是你没有引用OFFICE的架包吧
  • 打赏
  • 举报
回复
zpreoa 2011-04-29
我的代码在创建Excel对象的时候就报错了。晕!
  • 打赏
  • 举报
回复
powerxsydj 2011-04-28
字段太长
  • 打赏
  • 举报
回复
topdesigner 2011-03-19
用 SaveCopyAs 换掉你们那该杀 的 SaveAs 试试吧!!!!!!!!!!!!!!
  • 打赏
  • 举报
回复
acesteven 2010-08-28
是不是超出范围造成的,我今天也遇到了,后来是减少了需要导出的列数就好了
  • 打赏
  • 举报
回复
算法模式 2010-08-16
我碰到的问题很奇怪,在VS中运行很正常,发布到IIS上就出现问题,请问是什么原因?
  • 打赏
  • 举报
回复
rogerhuyin 2010-06-07
我也遇见这个问题了,太复杂了
  • 打赏
  • 举报
回复
a597525618 2010-04-22
帮顶!!!
  • 打赏
  • 举报
回复
irenehu84 2010-04-03
Excel.Cells 的下标不能为0. 否则就会出现异常:HRESULT:0x800A03EC
就是这个错误,害死我了,
感谢homezzm
  • 打赏
  • 举报
回复
artan008 2010-03-19
我也出现这个错误,谁知道?
  • 打赏
  • 举报
回复
注意:Excel.Cells 的下标不能为0. 否则就会出现异常:HRESULT:0x800A03EC
  • 打赏
  • 举报
回复
black1022 2009-10-28
第4步 说的具体点吧 要不然找不到
  • 打赏
  • 举报
回复
silentwins 2009-10-27
当EXCEL单元格处于编辑状态时,往单元格赋值会出现 HRESULT: 0x800A03EC 错误,原因是编辑时,EXCEL很多功能被禁用。

如何解决这个问题

方法1:赋值之前,将EXCLE文件保存一下

Excel.Worksheet ws;//excel工作薄中的工作表

Object missing = System.Reflection.Missing.Value;
ws.SaveAs("c:\\temp.xls", missing, missing, missing, missing, missing, missing, missing, missing, missing);

ws[3,4]="test";

方法2:

Excel中,如何在cell处于编辑状态时,对其用代码赋值

当我们用Winform程序去自动化Excel的时候,常常要实现这样的功能,给一个cell赋值,貌似很简单,得到range以后,设置它的Value2属性就可以了。但是还是会存在一个小问题,当你要赋值的cell正处于编辑状态的时候,针对该cell的所有代码将被忽略,赋值失败。(如当A1格处于编辑状态时,用代码对A1赋值将没有任何效果)

所以如何判断Excel是否处于编辑状态,成为解决这个问题的关键。很多人都曾试图找一个事件能在Excel进入编辑状态的时候触发,让程序能够得到通知。但是Excel至少可以通过四种方法进入编辑状态:

· 双击一个cell

· 按F2

· 选中一个cell,直接输入

· 选中一个cell,单击激活公式栏的输入框

Excel只提供了一个Worksheet. BeforeDoubleClick能够帮助我们检测到第一个事件,对于另外三个,我们无能为力。怎么办?

当时困惑了很久,但是后来突然发现,当Excel处于编辑状态的时候,工具栏上很多很多的按钮都会被禁用。这下问题就简单了,选取一个按钮,获取它的句柄,在我们给cell赋值之前,测试这个按钮的Enabled状态,如果为false,表明Excel正处于编辑状态,调用API将Excel窗口激活,再给程序发送一个ESC键以退出编辑状态,然后实行赋值。整个代码如下:(我选择了Format Painter按钮来测试它的Enable状态。关于如何获得一个按钮的句柄,本blog上有文章详细解释,见 :“无敌的CommandBar和它的Control”)

private Excel.Application app = null;

private object missing = Type.Missing;

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

app = Marshal.GetActiveObject("Excel.Application") as Excel.Application;

}

[DllImport("User32.Dll")]

public static extern void SetForegroundWindow(int h);

private void button1_Click(object sender, EventArgs e)

{

try

{

if (!app.CommandBars["Standard"].Controls["&Format Painter"].Enabled)

{

SetForegroundWindow(app.Hwnd);

app.SendKeys("{ESC}", missing);

}

app.get_Range("A1", missing).Value2 = "Test";

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

测试以上Demo:关闭电脑中所有Excel的实例,新打开一个Excel,运行本程序。切换回Excel,使A1格处于编辑状态。切换到本程序,点击button1,会看到Excel的窗口被激活,并且A1的值变为“Test”。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/luckisok/archive/2009/10/07/4638834.aspx
  • 打赏
  • 举报
回复
huwei12345 2009-10-27
http://bboy.cnblogs.com/
里面有
  • 打赏
  • 举报
回复
black1022 2009-10-27
代码没问题的,我的好几个机器上都可以,传服务器不行的。
  • 打赏
  • 举报
回复
idiotzeng 2009-10-27
saveas函数的几个参数不传空,换着赋几个值试试
  • 打赏
  • 举报
回复
xuenzhen123 2009-10-27
你这个代码看着有点晕
给你个Excel导入导出的类
参考看看http://blog.csdn.net/xuenzhen123/archive/2009/10/22/4713019.aspx
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
.NET社区
加入

6.0w+

社区成员

.NET技术交流专区
社区管理员
  • ASP.NET
  • R小R
  • 喵叔哟
帖子事件
创建了帖子
2009-10-26 11:06
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。