[英]'Invalid Index' using Excel Interop in C#
尝试检索应该存在的分页符项时,我收到无效的索引COM异常 。
每当我尝试访问Excel.Worksheet.HPageBreaks列表中的第3个或更高项目时,它就会出现,它返回无效的索引错误。 如果它是项目1或2,则检索该项目并给我所需的参数没有问题。 (我正在尝试检索每个页面上的分页符行,以确保输入的数据在某些时候不会分开。)
我已经将现有代码初始化了,因为我可能正在设置一些参数,而您看到的却是冲突的,这可能是我可能不知道的。 我的输出是MessageBoxes。
这是我现有的代码:
Excel.Application xApp = new Excel.Application();
Excel.Workbook xWorkBook;
Excel.Worksheet xWorkSheet;
object missingVal = System.Reflection.Missing.Value;
xWorkBook = xApp.Workbooks.Add(missingVal);
xWorkSheet = xWorkBook.Worksheets.get_Item(1);
xWorkSheet.PageSetup.Orientation =
Microsoft.Office.Interop.Excel.XlPageOrientation.xlPortrait;
xWorkSheet.PageSetup.Zoom = false;
xWorkSheet.PageSetup.FitToPagesTall = 20;
xWorkSheet.PageSetup.FitToPagesWide = 1;
xApp.UseSystemSeparators = false;
xWorkSheet.Columns[1].ColumnWidth = 25;
xWorkSheet.Columns[2].ColumnWidth = 10;
for (int i = 3; i < 28; i++)
xWorkSheet.Columns[i].ColumnWidth = 1;
var range = xWorkSheet.get_Range("A1", "AB1");
range.Merge();
range.Font.Size = 16;
range.RowHeight = 21;
range.Font.Bold = true;
range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
range = xWorkSheet.get_Range("A2", "AB2");
range.Merge();
range.Font.Size = 10;
range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
MessageBox.Show(xWorkSheet.HPageBreaks.Count.ToString()); //This gives zero pagebreaks
xWorkSheet.Cells[500, 1] = " ";
MessageBox.Show(xWorkSheet.HPageBreaks.Count.ToString()); //This gives nine pagebreaks
MessageBox.Show(xWorkSheet.HPageBreaks.Item[1].Location.Row.ToString()); //This returns 51
MessageBox.Show(xWorkSheet.HPageBreaks.Item[2].Location.Row.ToString()); //This returns 102
MessageBox.Show(xWorkSheet.HPageBreaks.Item[3].Location.Row.ToString()); //This is where it breaks with the error
在代码的底部,我使用xWorkSheet.HPageBreaks.Count.ToString()
检查项目是否在分页符中总共有9个项目。 它似乎似乎无法检索项目2以后的任何项目。不确定是否重要,但是我已尝试进行切换
xWorkSheet.HPageBreaks.Item[3]
至
xWorkSheet.HPageBreaks[3]
并
xWorkSheet.HPageBreaks[xWorkSheet.HPageBreaks.Count] //Success at 1 or 2 PBs only
并尝试在Excel表格中除行500以外的其他位置放置空格字符。
我完全没有主意,一直在寻找解决方案,只是找到了2010年发布的不相关的解决方案。这是我有史以来第一个提出的问题,因此,如果我有任何遗漏,请告诉我! :)
我可能错过的任何想法或解决方案?
多谢你们。
编辑:不幸的是,我也尝试使用一个foreach循环,就像这篇文章一样 ,它再次返回一个无效的索引错误,专门指出了foreach循环作为原因。 我的想法不多了...
实例化xWorksheet
,尝试插入以下行:
xApp.ActiveWindow.View = XlWindowView.xlPageBreakPreview;
xWorkSheet.DisplayPageBreaks = true;
xWorkSheet.DisplayAutomaticPageBreaks = true;
这应该允许所有分页符值在对象中变得可见,从而正确返回。
未按预期返回计数(9),但未找到计数的原因是因为默认的“视图”位于第一页/单个页面中。 因此,您有2个分页符,但没有看到除第一页之外的其余分页符。
这里的键实际上是xlPageBreakPreview
但另外两行也应该使对象在以后的任何更改中具有完全的可见性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.