我想從C#讀取使用COM的Excel文件,並且可以打開並加載它。但是,我不想使用表格中的所有數據(每月展開一次),只是從表格頂部開始的某個子集(第3行用於標題,第4行用於數據)並且結束。我目前可以得到一個代表整個數據集的範圍爲Excel.Worksheet.UsedRange
,但接下來我需要將其操作到所需的範圍,或者(最好)找到終點以進入我的實際數據檢索的另一個範圍。任何人都可以告訴我怎麼做這些?謝謝。需要在C#中查找Excel範圍的起點和終點#
回答
我不確定你在做什麼。但這裏有一些例子。
假設我有以下範圍:
Excel.Worksheet sheet = this.Application.ActiveSheet as Excel.Worksheet;
Excel.Range range = sheet.get_Range("A1", "B5") as Excel.Range;
下移到你的範圍由n
- 值行:
int n = 1;
int rows = range.Rows.Count;
int cols = range.Columns.Count;
Excel.Range newRange = range.get_Offset(n, 0).get_Resize(rows-n,cols);
newRange.Select(); //will select the new range will be 1 row lower
移動你的底行了
Excel.Range newRange = range.get_Resize(rows-n,cols);
newRange.Select(); //will select the new range will be 1 row higher
我假設你可以弄清楚如何將它左右移動。
get_Offset()
將移動整個範圍,然後您需要調整範圍的大小。
編輯:現在,我知道你想要什麼。
要選擇最後一個單元格:
Excel.Range lastCell = range.Cells[rows, cols] as Excel.Range;
lastCell.Select();
現在你可以使用自己的出發點,像這樣:
Excel.Range newRange = sheet.get_Range("B1", lastCell);
newRange.Select();
你回答了你自己的問題,但我仍然認爲這個答案對你長期有用。 – 2010-02-18 19:06:46
是的,當我知道我想要去的位置時,這非常棒,但是當我不知道它會是什麼時,我試圖找到最後的數據位置。 – 2010-02-18 19:09:06
@Tom,請看看我的更新的答案,它會顯示如何做你想做的,沒有get_Address。 – 2010-02-18 19:21:03
從MSDN:
「使用完屬性,與來自XlDirection枚舉(xlUp,xlToRight,xlToLeft,xlDown),一個值一起檢索表示在該區域的端部的細胞的範圍內,就好像你按下了枚舉值所描述的鍵;「
rngDown = rng.get_End(Excel.XlDirection.xlDown);
有沒有這樣的方法可用,我想你正在考慮get_End – 2010-02-18 18:46:45
當我嘗試這個,它返回包含工作表(行65536)的結束,而不是UsedRange的結束。 – 2010-02-18 18:50:01
@Stan,是的,你說得對,是的MS網站上的印刷錯誤,謝謝 – 2010-02-18 19:02:46
您應該能夠使用Range.Row,Range.Rows.Count,Range.Column和Range.Columns.Count性能,讓您範圍的開始和結束,像這樣:
Dim used As Range, first As Range, last As Range
Set used = Sheet1.UsedRange
Set first = Sheet1.Cells(used.Row, used.Column)
Set last = Sheet1.Cells(used.Row + used.Rows.Count, used.Column + used.Columns.Count)
MsgBox ("First: " + first.Address + " Last: " + last.Address)
這示例代碼在VBA,但所有這些函數都應該可以在COM中使用C#。
@Joseph,又出現了MS網站上的印刷錯誤,使用get_End代替 – 2010-02-18 19:03:54
確保你要麼選擇一個單元格先,或聯合使用形式 – 2010-02-18 19:04:34
好吧,找到了答案(經過近3個小時的總搜索,在這裏問了2個小時),所以會在這裏發佈給其他人。
Excel.Range urange = (Excel.Range)xlWorkSheet.UsedRange; // gives us the actual range
string used = urange.get_Address(false, false, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing));
從MSDN:
public string get_Address (
[OptionalAttribute] Object RowAbsolute,
[OptionalAttribute] Object ColumnAbsolute,
[OptionalAttribute] XlReferenceStyle ReferenceStyle,
[OptionalAttribute] Object External,
[OptionalAttribute] Object RelativeTo
)
這顯然前兩個是真/假標誌,下一個被定義爲Microsoft.Office.Interop.Excel.XlReferenceStyle
對象,我猜外部要麼是一個參考外部文件或某種標誌。 RelativeTo,我只能猜測它指的是任意定義的位置,也許是一個範圍對象,也許是一個字符串。不幸的是,MSDN在這個話題上非常稀少,所以我只是在這裏猜測併發布我的猜測。然而,使用這段代碼,因爲我已經發布了,所以我能夠檢索到總的用作「A1:B245」,它給了我正是我想要的,然後我可以通過提取第二部分創建一個新的範圍,然後可以繼續。
這工作完美!不知道爲什麼更多的人沒有看過這個。 – 2013-04-17 14:20:34
- 1. 在熊貓數據框中查找由起始點和終點定義的共享子範圍
- 2. 查找數據幀中的起點和終點
- 3. 在起點和終點
- 4. 通過他們的起點和終點確定整數和他們組範圍
- 5. 需要在Oracle列表和個人中查找範圍SQL
- 6. 查找街道起點和終點的座標
- 7. Excel的總和範圍匹配查找
- 8. 查找C中的範圍
- 9. 在Excel VBA中,我需要繪製動態範圍的散點圖
- 10. 查找號碼範圍交叉點
- 11. 如何查找給定線的起點和終點的箭頭提示點
- 12. 找到由其起點和終點定義的兩個範圍之間的重疊區域
- 13. EXCEL多個範圍 - 每個範圍需要不同的答案
- 14. MySQL - 在數據庫中查找半徑範圍內的點
- 15. 需要幫助尋找施氮量的Excel範圍
- 16. iOS Objctive-C浮點範圍
- 17. 的匹配字符串,而無需返回起點和終點
- 18. excel查找C中單元格的範圍#
- 19. Excel VBA:查找範圍內的對象
- 20. 點點參數的範圍
- 21. 查找Excel範圍名稱的起始行號
- 22. 在範圍中查找列
- 23. 有沒有辦法在Excel中找到範圍內的範圍?
- 24. 地點範圍
- 25. 如何查找d3中給定範圍內的數據點數
- 26. 基於X範圍查找網格中的有效節點
- 27. 在增加的範圍內查找連續點
- 28. UIVideoEditorController知道起點和終點
- 29. Horintal滾動型終點和起點
- 30. 查找範圍值其中X是中點
讓我知道如果你需要更多的幫助,我的回答,我沒」 t確定您的Excel體驗深度 – 2010-02-18 18:43:08
您能否在您的問題中更具體,您究竟需要什麼? UsedRange返回適當的範圍,你只是想調整它? – 2010-02-18 18:51:42
斯坦,那完全正確。我不希望整個範圍,只是終點,所以我可以用我自己的起點。 – 2010-02-18 19:12:41