4

このコードでExcelファイルからデータを読み取ります

        Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
        Microsoft.Office.Interop.Excel.Range range;

        int rCnt = 0;
        int cCnt = 0;
        string[,] data;

        xlWorkSheet = (Worksheet)wb.Worksheets.get_Item(sheetId);

        range = xlWorkSheet.UsedRange;

        data = new string[range.Rows.Count, range.Columns.Count];

        for (rCnt = 1; rCnt <= range.Rows.Count; rCnt++)
        {
            for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++)
            {          
                data[rCnt - 1, cCnt - 1] = (string)
                (range.Cells[rCnt, cCnt] as Range).Text;
            }
        }

列スペースが数値を表示するのに十分な大きさではないため、Excelの値が###と表示されるセルに時々遭遇します。もちろんExcelでは、セルをクリックすると上部の行に正しい値が表示されますが、私のプログラムでは、正しい数値ではなく###が値として取得されています。

ここに何かアドバイスはありますか?

4

3 に答える 3

4

Range.Valueの代わりにプロパティを使用してみてくださいText

だから代わりに

(range.Cells[rCnt, cCnt] as Range).Text;

あなたが書くだろう

(range.Cells[rCnt, cCnt] as Range).Value;
于 2012-04-25T08:16:42.993 に答える
1

プロパティ Value OR Value2 を使用して Range を読み取る例を数多く見てきました。
これを試していただけますか?

data[rCnt - 1, cCnt - 1] = (string)(range.Cells[rCnt, cCnt] as Range).Value.ToString();

Value2 プロパティは Value に似ていますが、Date 列を適切に変換しないため、Excel ファイルに日付列がある場合は Value を使用することをお勧めします。ValueとValue2の違いについての記事はこちら

于 2012-04-25T08:13:52.917 に答える
0

use (string) (range.Cells[rCnt, cCnt] as Range).Value as Value は、セルの実際の値を返します。テキストは、スプレッドシートに実際に表示されているものを返します

于 2012-04-25T08:18:10.650 に答える