使用以下代码运行Excel加载项时出现"HRESULT:0x800A03EC"错误:
Excel.Range rng = ActiveSheet.Cells[x, y] as Excel.Range;
string before = rng.Value2;
string cleanV = System.Text.RegularExpressions.Regex.Replace(before, @"\s+", "");
rng.set_Value(cleanV);
Run Code Online (Sandbox Code Playgroud)
当错误发生时,X和Y设置为1,因此不会违反Excel范围.我进行了广泛的搜索并尝试了多种设置单元格值的方法(例如,Cells [x,y],range.set_Value()),但是为什么会发生这种错误以及如何避免它.
任何帮助是极大的赞赏.
以下是例外情况:
System.Runtime.InteropServices.COMException was unhandled by user code
HResult=-2146827284
Message=Exception from HRESULT: 0x800A03EC
Source=""
ErrorCode=-2146827284
StackTrace:
at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
at Microsoft.Office.Interop.Excel.Range.set_Value(Object RangeValueDataType, Object value)
at ImportValidation.ThisAddIn.removeAnySpaces(Int32 x, Int32 y) in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 354
at ImportValidation.ThisAddIn.ReadHeaders(Hashtable columnAddress) in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 123
at ImportValidation.ThisAddIn.mapColumns() in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 493
at ImportValidation.Ribbon1.button6_Click(Object …Run Code Online (Sandbox Code Playgroud) 我正在寻找使用C#将大型2D数组写入Excel工作表。如果数组是500 x 500,那么我用来编写此代码的代码如下:
var startCell = Worksheet.Cells[1, 1];
var endCell = Worksheet.Cells[500, 500];
var writeRange = (Excel.Range)Worksheet.Cells[startCell, endCell;
writeRange.Value = myArray;
Run Code Online (Sandbox Code Playgroud)
我在这条线上有一个例外:
var endCell = Worksheet.Cells[500, 500];
Run Code Online (Sandbox Code Playgroud)
正如通过COM使用C#和Excel的任何人都可以作证,收到的错误消息几乎没有用。我认为问题在于,当我第一次创建工作表时,用于工作表的基础数据结构的大小不足以索引单元500,500。
有人知道如何达到预期的结果吗?我希望有一个简单的方法可以在创建Range之前重新调整基础数据结构的大小。
谢谢。
编辑:错误消息是:
{"Exception from HRESULT: 0x800A03EC"}
Run Code Online (Sandbox Code Playgroud)
和excel错误代码为-2146827284。
更新:在下面的注释中提供的链接暗示了在兼容模式下打开Excel工作表的问题。这似乎是问题所在。如果在运行代码之前以.xlsx或.xlsm格式保存文档,这似乎可以正常工作。我的问题是我不能期望用户每次都这样做。有没有实现这一目标的计划方式?是否只是打开文件,检查扩展名,然后根据需要将其保存为新格式的情况?
我正在尝试修改和保存Excel中的数据.使用下面的代码,我正在访问工作表,执行修改,然后保存文件.我无法保存文件.这是我的代码:
Application excel = new Application();
excel.Visible=true;
Workbook wb = (Workbook)excel.Workbooks.Open(@"C:\Users\dnyanesh.wagh\Desktop\BookExcel1.xlsx");
Worksheet ws = (Worksheet)wb.Worksheets[1];
ws.Cells[1, 1] = "sagar";
ws.Cells[2, 1] = "sagar";
ws.Cells[3, 1] = "sagar";
wb.Save();
wb.close();
Run Code Online (Sandbox Code Playgroud)
我收到此错误:"名为'BookExcel1.xlsx'的文件已存在于此位置.您要替换它吗?"
所以我将代码更改为:
Workbook wb = (Workbook)excel.Workbooks.Open(@"C:\Users\dnyanesh.wagh\Desktop\BookExcel1.xlsx",0, false, 5, "", "",
false, XlPlatform.xlWindows, "", true, false,
0, true, false, false););
Run Code Online (Sandbox Code Playgroud)
然后错误是:"BookExcel1.xlsx被user_name.open修改为只读".如果我单击"取消"按钮,我会收到上面的例外"HRESULT异常:0x800A03EC"
我也尝试过:
wb.SaveAs(@"C:\Users\dnyanesh.wagh\Desktop\BookExcel1.xlsx");
wb.Close(true,null,null);
Run Code Online (Sandbox Code Playgroud)
从那里我收到相同的错误,上面的文件显示修改.
任何人都可以告诉我如何保存文件并进行修改?