C# Excel Interop 合并不起作用。

4

我已经定义了一个范围:

Range range =  ws.Range[ws.Cells[7, 1], ws.Cells[7, 4]];

并通过检查

range.Interior.Color = rgbBlueViolet;

所以范围是正确的,因为我看到它被标记颜色了。但是当我执行下面的操作时:
range.Merge(true);

我得到了以下异常:
{System.Runtime.InteropServices.COMException (0x800A03EC):HRESULT 异常: 0x800A03EC 在 System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) 在 Microsoft.Office.Interop.Excel.Range.Merge(Object Across)
这个异常我不太明白。
我的目标是将前4列合并在一起,这对我来说似乎是合理的。
谢谢您的帮助, Patrick

你可以尝试手动从Excel合并范围,以查看错误是什么,或者使用range.Merge(false);。有一些情况下是不允许合并的。 - Slai
唉,不行。手动操作完美无缺。 - Patrick
1个回答

4

好的,问题在于首先必须选择要合并的范围。而为了做到这一点,工作表不能被最小化。因此代码如下:

Application app = new Application();
app.Visible = false;
app.WindowState = XlWindowState.xlNormal; <---not minimized   
...
Range r = ws.Range[ws.Cells[row + 7, 1], ws.Cells[row + 7, 5]];
r.Select(); <-----necessary
r.Merge(false);

1
非常感谢!这个问题发生在我的Windows 10、Excel 2016上,但是这个方法解决了它。奇怪的是,在一些电脑上最小化窗口也能正常工作,而在另一些电脑上却不行。Windows变得太快/聪明了,超出了自己的能力范围。 - D_Bester
1
关于 HRESULT: 0x800A03EC 的“糟糕异常”更多信息,请参见 http://stackoverflow.com/a/20424879/2559297。 - D_Bester
1
另外,我不需要选择;只需设置app.WindowState = XlWindowState.xlNormal。 - D_Bester

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接