2

C# で Excel 列を文字列として読み取ろうとしています。私は次のコードを書きました:

 string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=c:\\excelFile.xls;"
                                + "Extended Properties=\"Excel 8.0;IMEX=1\"";

問題は、1 つの列に数値や文字列などのデータ型が混在していることです。すでに解決策を探しましたが、役に立ちませんでした。次のリンクは役に立ちませんでした( https://stackoverflow.com/questions/11200472/read-excel-columns-as-text Excel は、上位 10 列に応じて列になるタイプを決定することがわかりました。どうすれば修正できますか?この問題は? Microsoft.Office.Interop.Excel を使用しています。

4

3 に答える 3

1

codeprojectでこれを見てください。コメントで述べたように、Interop を使用している場合、接続文字列は必要ありません。ワークブックを開いて項目の配列 (オブジェクト配列) を取得し、各項目で ToString() を呼び出してその文字列表現を取得するだけです。このようなことをする必要があります:

ApplicationClass app = new ApplicationClass();
app.Visible = false;
app.ScreenUpdating = false;
app.DisplayAlerts = false;

Workbook book = app.Workbooks.Open(@"path\Book1.xls", 
    Missing.Value, Missing.Value, Missing.Value, 
    Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
    Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
    Missing.Value, Missing.Value, Missing.Value);

Worksheet sheet = (Worksheet)book.Worksheets[1];
Range range = sheet.get_Range(...);

string execPath = Path.GetDirectoryName(
    Assembly.GetExecutingAssembly().CodeBase);

object[,] values = (object[,])range.Value2;

for (int i = 1; i <= values.GetLength(0); i++)
{
    for (int j = 1; j <= values.GetLength(1); j++)
    {
        string s = values[i, j].ToString();
    }
}
于 2013-03-27T20:40:32.000 に答える
1

私が通常行うことは次のとおりです。

        Range FirstCell = YourWorkSheet.Range["A1"];  //Use the Header of the column you want instead of "A1", or even a name you give to the cell in the worksheet.

        List<string> ColumnValues = new List<string>();

        int i = 1;
        object CellValue = FirstCell.Offset[i, 0].Value;
        while (CellValue != null)
        {
            ColumnValues.Add(CellValue.ToString());
            i++;
            CellValue = FirstCell.Offset[i,0].Value;
        }
于 2013-03-27T20:38:24.057 に答える
0

うーん。参考になるかわかりませんが、私も同じ症状でした。今では、次の接続文字列で機能します。

<add name="Excel2010File"
     connectionString="Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0}; Extended Properties=&quot;Excel 12.0;READONLY=TRUE;IMEX=1&quot;"
     providerName="Microsoft.ACE.OLEDB.12.0" />

持っていない場合は、Web で私のプロバイダーのライブラリを見つけることができます (申し訳ありませんが、リンクはもうありません)。12.0また、バージョンの低い Excel ファイルでも設定できます。

于 2013-03-27T20:17:32.340 に答える