14

OLEDB接続を使用せずにOpenXML形式でc#を使用してxlsおよびxlsxファイルを読み取る方法。OpenXML形式のプロシージャを探しています。

以下は、OLEDBpreocedureを使用したコードです。しかし、私はOpenXML形式を探しています。

public static DataTable ConvretExcelToDataTable(string FilePath)
{
    string strConn = string.Empty;

     if (FilePath.Trim().EndsWith(".xlsx"))
     {
         strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", FilePath);
     }
     else if (FilePath.Trim().EndsWith(".xls"))
     {
         strConn = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";", FilePath);
     }

    OleDbConnection conn = null;
    OleDbCommand cmd = null;
    OleDbDataAdapter da = null;
    DataTable dt = new DataTable();
    try
    {
        conn = new OleDbConnection(strConn);
        conn.Open();
        cmd = new OleDbCommand(@"SELECT * FROM [Sheet1$]", conn);
        cmd.CommandType = CommandType.Text;
        da = new OleDbDataAdapter(cmd);
        da.Fill(dt);
    }
    catch (Exception exc)
    {
        Console.WriteLine(exc.ToString());
        Console.ReadLine();
    }
    finally
    {
        if (conn.State == ConnectionState.Open)
            conn.Close();
        conn.Dispose();
        cmd.Dispose();
        da.Dispose();
    }
    return dt;
}

要件は、上記の変換をOpenXML形式で実装することです。ありがとう。

4

3 に答える 3

4

xlsx用のOpenXmlSDKが必要になります。

http://www.microsoft.com/en-gb/download/details.aspx?id=30425

ただし、XLSの場合、これを使用することはできません。XLS形式はxmlに基づいていません。

古いファイルにアクセスするためにNPOIライブラリを使用します。

http://npoi.codeplex.com/

NPOIライブラリはxlsxもサポートしているため、これにより、一貫した方法でそれらにアクセスできます。欠点は、シート/行/列を手動でループし、データセットを構築する必要があることです。これは、大きなワークブックがある場合にパフォーマンスに影響を与える可能性があります。クエリを使用してデータにアクセスする場合は、OLEDBが私が見つけた唯一の方法です。

于 2012-10-08T14:21:45.817 に答える
2

Excelがインストールされている場合は、Microsoft.Office.Interop.Excelを使用できます。

http://support.microsoft.com/kb/302084

于 2012-10-08T14:29:04.593 に答える
0

\接続文字列から削除します。あなたは以下のように与えることができます。

conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+filepath.ToString() + ";Extended Properties=Excel 12.0 Xml;");
于 2015-05-26T06:24:33.490 に答える