web-dev-qa-db-ja.com

C#を使用してXLSおよびXLSXファイルを読み取る方法

C#を使用してxlsおよびxlsxファイルを読み取る方法OLEDB接続を使用せずにOpenXML形式で。 Open XML形式の手順を探しています。

以下は、私がOLEDB preocedureを使用したコードです。しかし、私は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形式で実装することです。ありがとう。

13
user1537319

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

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

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

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

http://npoi.codeplex.com/

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

4
Paul Grimshaw

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

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

2
Craig Graham

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

conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+filepath.ToString() + ";Extended Properties=Excel 12.0 Xml;");
0
Vivek