[英]C# ExcelDNA read from dynamic array
我第一次在這里發帖。 通常,我發現一個人可能需要回答的所有問題。 在這種情況下,對於我的一生,我無法弄清這一點,因此請繼續。
我嘗試使用ExcelDNA讀取Excel中的一系列值。 該范圍將始終具有2列,但是行數是動態的,如下所示:
n行數
字符串,浮點數字符串,浮點數...第n行
現在,我可以使用ExcelDNA和ExcelReference讀取范圍,如下所示:
object[,] bencharray = ExcelData.ReadArrayValue(0, 10, 0, 1, "Sheet1");
public static class ExcelData
{
public static dynamic ReadArrayValue(int rf, int rl, int cf, int cl, string sheet)
{
//This reads an array with 4 co-ordinates from the specified sheet
ExcelReference readarray = new ExcelReference(rf, rl, cf, cl, sheet);
return readarray.GetValue();
}
}
因此,這將從單元格A1開始靜態讀取具有2列的11行范圍。
我正在尋找類似於VBA的xlDown或UsedRange。 理想情況下,當范圍的底部為空白時,這將停止,並允許繼續使用位於表下方的單元格。
我不確定是否應該使用Interop.Excel或如何使用它。
任何幫助,將不勝感激。 非常感謝
您可以使用C API來實現。 您需要xlcSelectEnd
函數,該函數可以在一個方向上擴展選擇范圍。 所以你會打電話
XlCall.Excel(XlCall.xlcSelectEnd, 4);
方向是:
這意味着您必須設置一個選擇( xlcSelect
),然后擴展它( xlcSelectEnd
),然后獲得當前選擇( xlfSelection
)。
關於Google網上論壇的討論也可能會有用: https : //groups.google.com/group/exceldna/browse_frm/thread/cc87114539c78f53 。
所有這些聽起來有些復雜,讓我認為您還應該考慮COM API。
使用Govert的示例ExcelSelectionHelper,您可以執行以下操作:
鑒於以下列舉:
public enum DirectionType
{
Up = 3,
ToRight = 2,
Down = 4,
ToLeft = 1
}
您可以這樣做:
public static ExcelReference End( this ExcelReference reference, DirectionType direction )
{
ExcelReference end = null;
using ( new ExcelSelectionHelper( reference ) )
{
// myReference is selected now...
XlCall.Excel( XlCall.xlcSelectEnd, (int)direction );
var selection = XlCall.Excel( XlCall.xlfSelection ) as ExcelReference;
var row = selection.RowFirst;
var col = selection.ColumnFirst;
end = new ExcelReference( row, row, col, col, selection.SheetId );
}
return end;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.