2017-04-11 32 views
1

我有問題,C#互操作的Excel得到有效範圍大文件C#的Excel:正確的方式來獲得的行和列數

https://www.dropbox.com/s/betci638b1faw8g/Demo%20Training%20Data.xlsx?dl=0

這是我的文件,但實際規模是1000,但我得到了49998

我使用的標準代碼

Excel.Application xlApp = new Excel.Application(); 
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(txtbTrainPath.Text); 
Excel.Worksheet xlWorksheet = xlWorkbook.Worksheets[1]; 
Excel.Range xlRange = xlWorksheet.UsedRange;    
xlApp.Visible = true; 
xlWorksheet.Columns[5].Delete(); 
xlWorksheet.Columns[3].Delete();    
rowCount = xlRange.Rows.Count; 
colCount = xlRange.Columns.Count; 

僅適用於該文件無法正常工作,其他文件效果很好。請幫我找出問題所在。如何僅調整有效大小的工作表。

+0

這聽起來像使用範圍可能返回擁有或者某些格式,或者說是不可見的數據單元。即使單元格包含NO數據,使用的範圍仍會返回單元格中包含ANY格式的單元格。 – JohnG

回答

2

我會使用這種方法來獲取行和列計數,它將返回非空單元格的結果。

// Find the last real row 
lastUsedRow = worksheet.Cells.Find("*",System.Reflection.Missing.Value, 
           System.Reflection.Missing.Value, System.Reflection.Missing.Value, 
           Excel.XlSearchOrder.xlByRows,Excel.XlSearchDirection.xlPrevious, 
           false,System.Reflection.Missing.Value,System.Reflection.Missing.Value).Row; 

// Find the last real column 
lastUsedColumn = worksheet.Cells.Find("*", System.Reflection.Missing.Value, 
           System.Reflection.Missing.Value,System.Reflection.Missing.Value, 
           Excel.XlSearchOrder.xlByColumns,Excel.XlSearchDirection.xlPrevious, 
           false,System.Reflection.Missing.Value,System.Reflection.Missing.Value).Column; 

這是給你參考的完整代碼:

using Excel = Microsoft.Office.Interop.Excel; 

Excel.Application xlApp  = null; 
Excel.Workbook wb   = null; 
Excel.Worksheet worksheet = null; 
int lastUsedRow    = 0; 
int lastUsedColumn   = 0; 
string srcFile    = @"Path to your XLSX file"; 

xlApp = new Excel.ApplicationClass(); 
xlApp.Visible = false; 
wb = xlApp.Workbooks.Open(srcFile, 
           0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", 
           true, false, 0, true, false, false); 

worksheet = (Excel.Worksheet)wb.Worksheets[1]; 
Excel.Range range 

// Find the last real row 
lastUsedRow = worksheet.Cells.Find("*",System.Reflection.Missing.Value, 
           System.Reflection.Missing.Value, System.Reflection.Missing.Value, 
           Excel.XlSearchOrder.xlByRows,Excel.XlSearchDirection.xlPrevious, 
           false,System.Reflection.Missing.Value,System.Reflection.Missing.Value).Row; 

// Find the last real column 
lastUsedColumn = worksheet.Cells.Find("*", System.Reflection.Missing.Value, 
           System.Reflection.Missing.Value,System.Reflection.Missing.Value, 
           Excel.XlSearchOrder.xlByColumns,Excel.XlSearchDirection.xlPrevious, 
           false,System.Reflection.Missing.Value,System.Reflection.Missing.Value).Column; 

xlApp.Workbooks.Close(); 
xlApp.Quit(); 

Marshal.ReleaseComObject(worksheet); 
Marshal.ReleaseComObject(wb); 
Marshal.ReleaseComObject(xlApp); 
1

下載好excel文件並查看後,我發現正如我所料,在第49998行C列格式化。字體不同,數字格式不同,字體顏色爲紅色。我簡單地刪除了第49998行的所有單元格,並且這只是將已使用的範圍行的數目減少到49997.您可以通過刪除最後一行來播放此猜測單元格的格式,然後再次檢查。我有一種感覺,49998行以上的所有單元格都有一些不同的格式。

修復這一張表以獲得正確的使用範圍。你有兩個選擇。 1)選擇從1001行開始的WHOLE行,然後向下滾動到49998行。按住SHIFT鍵,單擊WHOLE行49998.選擇行1001到49998,右鍵單擊選擇並選擇「Delete」 ,如果它詢問,則將單元格向上移動。或2)僅用數據複製單元格並將單元格粘貼到新工作表中,刪除舊工作表並將新工作表重命名爲以前的工作表名稱。我希望這是有道理的。

+0

我試圖刪除行1001到49998,但它不能刪除。我如何刪除行? –

+0

右鍵單擊選擇並選擇「刪除」...或從「主頁選項卡」的「單元格」功能區中選擇「刪除」 – JohnG

+0

現在我已經試過這是程序化..我如何在互操作中選擇多行。我將使用Range.ClearFormats。清除範圍[1001:49998] .delete或clearFormats。我找到了...請幫助我 –

相關問題