簡體   English   中英

從動態數組讀取C#ExcelDNA

[英]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);

方向是:

  • 1-左
  • 2-對
  • 3-上
  • 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM