工作表上的结果:0x800A03EC

本文关键字:0x800A03EC 结果 工作 | 更新日期: 2023-09-27 18:05:49

我在工作表上得到HRESULT: 0x800A03EC。范围的方法。行数大于70K。Office 2007 .

代码:

Microsoft.Office.Interop.Excel.Range neededRange
    = currentWS.Range[cell.Cells[1, 1], cell.Cells[nRowCount, nColumnCount]];

这里我的行数大于65530。在这个函数上中断。我观察到,只有当行数超过65530时,它才会中断。

工作表上的结果:0x800A03EC

如果使用向后兼容的工作表(.xls)而不是。xlsx

要允许在office 2007版本中打开工作表,它不能包含超过65000行。您可以使用ctrl+向下箭头键来检查工作表中的行数,直到到达底部。如果您尝试获得一个大于该行数的范围,它将创建一个错误

我们收到的是相同的。例外是

Stacktrace: at Microsoft.Office.Interop.Excel._Workbook。保存(对象文件名,对象文件格式,对象密码,对象WriteResPassword,对象ReadOnlyRecommended, Object CreateBackup, XlSaveAsAccessMode AccessMode, Object ConflictResolution, Object AddToMru, Object TextCodepage, Object Text可视化布局,对象本地)'

带有 内部异常的

Exception from HRESULT: 0x800A03EC 2012-11-01 10:37:59 '

我们能够解决这个问题的信息从这篇文章,我引用在这里为方便…

  1. 以管理员身份登录服务器。
  2. 点击"开始"->"运行",输入"taskmgr"
  3. 转到任务管理器中的进程选项卡,选中"显示所有进程"用户"
  4. 如果列表中有"Excel.exe"条目,右键单击输入并选择"结束进程"
  5. 关闭任务管理器
  6. 点击"开始"->"运行",输入"services.msc"
  7. 停止正在运行的Excel自动化服务
  8. 点击"开始"->"运行",输入"dcomcnfg"
  9. 这将调出组件服务窗口,展开"控制台"Root"->"Computers"->"DCOM Config"
  10. 在组件列表中找到"Microsoft Excel Application"
  11. 右键单击条目,选择"属性"
  12. 进入属性对话框的"身份"选项卡。
  13. 选择"交互用户"。
  14. 点击"OK"按钮。
  15. 切换到服务控制台
  16. 启动Excel自动化服务
  17. 重新测试应用程序

我遇到这个问题。

发现在我代码的某个地方,我要求它从0开始计数(就像你在c#代码中那样)。

显示Excel计数从1开始。

查看上面的各种响应,并根据我自己最近的经验(我在做完全不相关的事情时得到了这个错误代码——设置Application.Calculation),我得出结论,相同的错误代码用于表示多个不相关的问题。所以@Garreh你可能应该问一个新的问题(并不是说任何人都能仅仅根据错误代码提供帮助)。我从c#中看到了同样的事情,在Word互操作中,相同的HRESULT似乎用于几乎所有类型的错误。我从来没有找到任何令人满意的微软文档来说明这些代码的含义。

如果要保存的分区上没有空间,也可能会出现这种情况。

我检查了我的高清,发现它是最大的。将一些不需要的文件移动到另一个分区解决了我的问题。

简单地说,excel文件损坏了。最好的解决方案是更改/修复文件。(复制现有文件并重新命名)

我不明白这个问题。但有件事解决了我的问题。

进入Excel选项>保存>以此格式保存文件>选择"Excel Workbook(*.xlsx)"。以前,我的工作簿以[兼容模式]打开,现在它们以正常模式打开。Range函数也可以。

仅供参考,得到错误尝试应用行样式....

wSheet.Rows(y).Style = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red)

无法回复/认可这个答案,所以在这里发布:

实际上,当数据从一个范围移动到另一个范围时,源/目标范围的格式也可能导致此错误。

在我的例子中,我想要复制的区域包含一个日期格式的列,并且该列包含一个具有无效日期值的单元格(由于其值为负整数,因此它甚至没有格式化)。因此,两个区域之间的复制操作在上述单元格处停止,从而产生这里讨论的错误消息。

在我的情况下,解决方案是使用Range。Value2而不是Range。值,这会导致Excel绕过将单元格格式化为日期(此处有更多详细信息)。但是,这将使日期和时间列显示为整数和小数。但是,如果通过设置日期和时间值的Range/Column/Cell,知道在哪里可以得到日期和时间值,则可以将格式更改为所需的格式。NumberFormat属性。

这不是直接回答问题,但我在打开xlsx文件时得到这个错误。问题是我在文件路径中使用了正斜杠。参见https://stackoverflow.com/a/24635904/5932003。它曾经在以前版本的Excel中工作,但不能与版本1711 (Build 8730.2127)。

我能够使用IDispatch->Invoke(…)诊断问题。, except info,…)。EXCEPINFO对象包含了一个有用的错误描述。我是在c++领域,但我怀疑类似于这篇文章的c#代码会做到这一点:在c#中打包IDispatch调用参数(使用disparams)。

在试图保存VS 2017中。net应用程序中创建的Excel文件时,我收到此错误代码0x800A03EC。我换了Excel。应用程序对象属性Visible=True,并让它运行到故障点。试图在Excel中手动完成步骤,然后发现我无法保存文件,因为缺少文件夹权限。我给文件夹添加了写权限,错误消失了。

对于像我这样有同样例外的人:

如果您试图传递空值而不是Missing,也可能发生这种情况。值(或类型缺失)

Worksheet worksheet = ...;
return worksheet.Range["A1", null]; //This call generates the error 0x800A03EC
return worksheet.Range["A1", Missing.Value]; //This works correctly

在2021年,当我得到这个问题。实际原因是:

对于Excel区域或单元格,我试图直接添加/删除注释,而不检查是否有注释绑定。

错误码为:

if ( comments_string.Length != 0)
{     range.AddComment( comments_string);
}

工作代码为:

if ( comments_string.Length != 0)
{     if (range.Comment != null) range.Comment.Delete();
     range.AddComment(comments_string);
}

编辑:这个更好!你不需要那个旧的函数,抱歉。请按以下步骤执行:

Microsoft.Office.Interop.Excel.Range neededRange = currentWS.Range["A1", ((Microsoft.Office.Interop.Excel.Range)currentWS.Cells[nRowCount, nColumnCount])];

那应该很有效。为了将来的参考,把你正在使用的相关代码放在你的问题里面。不要让别人在评论里问。我想这就是你被否决的原因。

当我试图将单元格数组分配给range.Value时,我有一个准确的代码错误。在我的情况下,这是错误的数据格式的问题。单元格的数据格式被设置为DATE,但用户犯了一个错误,将"20.02.2013"改为"20.02.0213"。Excel的COM对象拒绝输入年份"0213",并抛出了这个错误的异常。

当我在开发一个将项目内容导出到excel文件的应用程序时,我也遇到了同样的问题。

我在论坛上找不到解决我的问题的方法,然后我检查了excel的最大容量,发现下面的链接说

"工作表大小为1,048,576行乘16,384列",这是我的情况下的问题,我导出的行不止这些。详情请参阅下面的链接

http://answers.microsoft.com/en - us/office/forum/office_2013_release excel/with excel - 2013 -很多-行-如何——这contain/271264fb - 3 - ab8 4 c5b aa0d - 7095 c5ac6108

的问候

在执行以下语句时,我有相同的错误代码:

sheet.QueryTables.Add("TEXT" & Path.GetFullPath(fileName), "1:1", Type.Missing)

原因是"TEXT"后面缺少分号(;)。

正确的是:

sheet.QueryTables.Add("TEXT;" & Path.GetFullPath(fileName), "1:1", Type.Missing)

我得到这个异常,因为我输入了:

ws.get_Range("K:K").EntireColumn.AutoFit();
ws.get_Range("N:N").EntireColumn.AutoFit();
ws.get_Range("0:0").EntireColumn.AutoFit();

看到错误了吗?提示:Excel接受从1开始的索引,但不像c#那样从0开始。

我得到这个错误,因为我试图重命名一个有太多字符的工作表

我同意Hugh W的帖子"我的结论是,相同的错误代码用于表示多个不相关的问题"

其他帖子没有提到,如果工作表被锁定,这个错误经常发生。虽然我没有测试过每种情况,但如果您试图通过VSTO/Com在工作表被锁定时抛出此错误,则似乎无法在excel中执行任何操作。例如,更改任何样式artifact(字体,字体大小,颜色,下划线),更改Excel Validation,更改列宽,行高,公式

我通过使用下面的代码解决了这个问题。请不要在这些函数中使用其他参数。

mWorkBook = xlApp.Workbooks.Open(FilePath)
mWorkBook.Save();

已解决

似乎这是一个相当通用的错误为"某些东西出错"与您尝试的操作。我观察到,如果您有公式错误并将公式分配到单元格中,也会发生这种情况。如。"=信息面板()

我遇到过它几次不同的时间,每次它总是一些错误,要么复制一个选项卡名称,或者在这个当前的情况下,它只是发生了,因为我只是有一个打字错误get_Range中,我试图通过数字和数字而不是字母和数字来获得单元格。
把我逼疯了,因为错误指向下面几行,但我已经注释掉了"错误行"上面的所有其他表单的创建,而这一行和下面的创建都没有问题。
碰巧扫描了上面的几行,看到我把6 + lastword, C + lastrow放在我的get_Range语句中,当然你不能有一个以数字开头的单元格,它总是字母而不是数字。

我遇到了同样的错误。对我来说,当我试图分别设置CountIf和CountIf时,我得到了错误。

经过一些错误的尝试,我发现这是我使用多个参数的所有公式的问题。

参数分隔符";"(分号),我在excel中使用的不是我在代码中使用的正确的。如果我用"(逗号)相反,这个公式是正确使用的。注:之后在Excel中查看时,显示为";(分号)。

我的试错过程包括尝试设置一堆不同的公式,这是我最终得到的"修复"。我正在运行一个英文窗口,但我位于丹麦,我不知道是否有某种本地化涉及到我的问题。

CultureInfo.CurrentCulture.TextInfo。ListSeparator是";",这对于分隔验证器规则值是正确的。也许这就是为什么我的参数分隔符是别的东西的原因。

不管怎样;公式可能是错误的,因为您需要使用不同的参数分隔符。

我有这个相同的错误代码。结果这里的一个评论帮助了我。计数不是从0开始。被注释掉的行抛出了这个错误。

string cell = (string)range.Cells[3, 3].Value;

string QuestionID = (string)range.Cells[1, 0].Value;这一行抛出了这个错误

我知道这是旧的,但我有同样的错误时,试图设置一个电子表格范围如下:

rngSumFormula = mxlWorksheet.Range(strFormulaRange)

有很多mxlWorksheet。Range语句,但是每次都失败。事实证明,经过大量的挖掘,我在strFormulaRange中的范围值与其他值之间的差异在于它在范围中有逗号,即B2,C2,D2: e2。在此语句之前,所有的范围值都有一个冒号,即D2:E2"

为什么这是一个问题?因为我在Windows 10中不使用逗号作为默认分隔符,而是使用管道字符(|),因为我处理许多SQL批量加载的描述字段,其中包含许多不是分隔符的逗号。一旦我把默认的分隔符改回逗号,错误就消失了。

这可能不会帮助很多人,因为我不认为分隔符的变化是很常见的,但因为这是我的解决方案,我想分享。仅供参考,您可以在这里更改Windows 10中的分隔符:

地区设置>附加日期,时间&区域设置更改日期、时间或数字格式其他设置,然后向下滚动到列表分隔符。

当我试图在Excel工作表中发布Notes列时,我得到了答案。床单不接受它。我一直得到这个错误。我还以为是某个角色之类的。如果是,我也不知道是什么。所以我在250处把它剪掉。我不知道实际的尺寸限制是多少?但是对于我在本报告中的目的来说,这并不重要:

空的我已经填上了"Missing.Value"

            if (dr[c] != null && dr[c].ToString() != "")
            {
                string t = dr[c].ToString().Replace("'t", "").Replace("|", ":").Replace("/", "-").Replace("'n", " ").Trim();
                if (t.Length > 250)
                    t = t.Substring(0, 250);
                arr[r, c] = t;
            }

当excel文件由于某种原因损坏时,也会出现这种类型的错误