簡體   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