'Invalid Index' 在 C# 中使用 Excel Interop

'Invalid Index' using Excel Interop in C#

我在尝试检索应该存在的分页项时遇到无效索引 COM 异常

每次我尝试访问 Excel.Worksheet.HPageBreaks 列表中的第 3 个或更高的项目时,它都会出现 returns 无效索引错误。如果它是第 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

并在第 500 行以外的 excel 工作表中尝试了 space 字符的不同位置。

我完全没有想法并搜索了解决方案,却发现了 2010 年发布的一个不相关的解决方案。这是我的第一个问题,所以如果我遗漏了什么,请告诉我! :)

有什么我可能遗漏的想法或解决方案吗?

谢谢大家。

编辑:不幸的是,我也尝试使用 foreach 循环,就像 this post 一样,它再次返回一个无效的索引错误,具体指向 foreach 循环作为原因。我 运行 没主意了...

实例化 xWorksheet 后,尝试插入这些行:

xApp.ActiveWindow.View = XlWindowView.xlPageBreakPreview;
xWorkSheet.DisplayPageBreaks = true;
xWorkSheet.DisplayAutomaticPageBreaks = true;

这应该允许所有分页符值在对象中可见,从而正确返回。

您的计数按预期返回 (9) 但未找到的原因是因为默认 'view' 属于 first/single 页面。因此,您有 2 个分页符,但没有看到第一页之外的剩余分页符。

这里的关键实际上是 xlPageBreakPreview - 但额外的两行也应该让对象完全了解任何未来的变化。