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