首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

c# 调用excle 异常 HRESULT: 0x800A03EC 怎么解决

2012-09-10 
c# 调用excle 错误 HRESULT: 0x800A03EC 如何解决源码信息:protected void Button1_Click(object sender,

c# 调用excle 错误 HRESULT: 0x800A03EC 如何解决
源码信息:
 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


[解决办法]
顶,每天回帖即可获得10分可用分
[解决办法]
你这个代码看着有点晕 
给你个Excel导入导出的类 
参考看看http://blog.csdn.net/xuenzhen123/archive/2009/10/22/4713019.aspx
[解决办法]
当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
[解决办法]
目前的excel驱动似乎只有32位的 
要运行 32 位版本的 ASP.NET 2.0,
1. 单击“开始”,单击“运行”,键入 cmd,然后单击“确定”。 
2. 键入以下命令启用 32 位模式: 
cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1 
3. 键入以下命令,安装 ASP.NET 2.0(32 位)版本并在 IIS 根目录下安装脚本映射: 
%SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i 
4. 确保在 Internet 信息服务管理器的 Web 服务扩展列表中,将 ASP.NET 版本 2.0.40607(32 位)的状态设置为允许。

热点排行