Как читать файлы xls и xlsx с помощью С#

Как читать файлы xls и xlsx с помощью С# с форматом OpenXML Без использования соединения OLEDB. Я ищу процедуру формата Open XML.

Ниже приведен код, в котором я использовал предварительную процедуру OLEDB. Но я ищу формат 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. Спасибо.

Ответ 1

Вам понадобится SDK OpenXml для xlsx:

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

Но для XLS вы не сможете использовать этот формат XLS не на основе xml.

Я использую библиотеку NPOI для доступа к старым файлам:

http://npoi.codeplex.com/

Библиотека NPOI также поддерживает xlsx, поэтому это даст вам последовательный способ доступа к ним. Внизу вам придется вручную прокручивать листы/строки/столбцы и создавать набор данных, который, вероятно, повлияет на производительность, если у вас большие книги. Если вы хотите использовать запросы для доступа к данным, OLEDB - единственный метод, который я нашел.

Ответ 3

Удалите \ из строки подключения. Вы можете указать ниже.

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