6

最初の列の値を配列に読み込もうとしています。それを行う最善の方法は何ですか?以下は私がこれまでに持っているコードです。基本的に、その列のデータの範囲を取得しようとしているので、セル値をシステム配列に取り込むことができます。

Microsoft.Office.Interop.Excel.Application xlsApp = new Microsoft.Office.Interop.Excel.Application();

if (xlsApp == null)
{
    Console.WriteLine("EXCEL could not be started. Check that your office installation and project references are correct.");
    return null;
}

//xlsApp.Visible = true;

Workbook wb = xlsApp.Workbooks.Open(filename, 0, true, 5, "", "", true, XlPlatform.xlWindows, "\t", false, false, 0, true);
Sheets sheets = wb.Worksheets;
Worksheet ws = (Worksheet)sheets.get_Item(1);

//***Breaks Here***
ListColumn column = ws.ListObjects[1].ListColumns[1];
Range range = column.DataBodyRange;
System.Array myvalues = (System.Array)range.Cells.Value;
4

3 に答える 3

9

これが私がそれを機能させるために最終的に使用したものです。Columns が実際に範囲を返すことがわかったら、そのように保存すると、コンパイルして正常に実行されるように見えます。これが私の ExcelReader クラスの作業方法です。これを WebDriver のテスト駆動データに使用する予定です。

    public static string[] FirstColumn(string filename)
    {
        Microsoft.Office.Interop.Excel.Application xlsApp = new Microsoft.Office.Interop.Excel.Application();

        if (xlsApp == null)
        {
            Console.WriteLine("EXCEL could not be started. Check that your office installation and project references are correct.");
            return null;
        }

        //Displays Excel so you can see what is happening
        //xlsApp.Visible = true;

        Workbook wb = xlsApp.Workbooks.Open(filename,
            0, true, 5, "", "", true, XlPlatform.xlWindows, "\t", false, false, 0, true);
        Sheets sheets = wb.Worksheets;
        Worksheet ws = (Worksheet)sheets.get_Item(1);

        Range firstColumn = ws.UsedRange.Columns[1];
        System.Array myvalues = (System.Array)firstColumn.Cells.Value;
        string[] strArray = myvalues.OfType<object>().Select(o => o.ToString()).ToArray(); 
        return strArray;
    }
于 2012-12-14T21:42:49.937 に答える
2

まず、実際に使用されている行数を計算します。

Excel.Range allCellsInColumn = xlWorksheet.Range["A:A"];
Excel.Range usedCells = allCellsInColumn.Find("*", Missing.Value, Missing.Value, Missing.Value,
    Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlPrevious, false, Missing.Value, Missing.Value);

それができたら、値を取得できます。

System.Array values = usedCells.Values;

配列に値を取得したら、何もない要素をスキップできます。一度に 1 つずつループせずに、何かが含まれているセルだけを取得する方法はないと思います。これは、Interop では非常に時間がかかります。

于 2012-12-14T21:43:02.393 に答える
0

あなたのデータはリストにありますか?あなたのコードは、存在しない可能性のある Excel リストを探しているようです。そうでない場合は、最初の列全体 ( A:A) を Range に取得して、その値を取得できます。

Range firstCol = ws.Range("A:A");
System.Array values = range.Value as System.Array;   
于 2012-12-14T21:29:28.157 に答える