繁体   English   中英

在C#中使用Excel Interop的“无效索引”

[英]'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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM