C#如何匯入匯出與處理Excel檔案

來源:互聯網
上載者:User
OleDB是微軟的戰略性的通向不同的資料來源的低級應用程式介面。支援很多種資料庫,此用戶端中DBF檔案的輸入輸出也是使用了此資料庫API。使用OleDB記得添加上命名空間:

using System.Data.OleDb;

xlsx檔案的輸入:

private void inputXlsx(){    string strConn2;    string filePath = inPath;    FileInfo fileInfo = new FileInfo(filePath);    string directory = fileInfo.DirectoryName;    strConn2 = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='{0}';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;';";    string strConnection = string.Format(strConn2, inPath);    OleDbConnection conn = new OleDbConnection(strConnection);    try    {        conn.Open();        String tableName = null;        DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);        tableName = dt.Rows[0][2].ToString().Trim();        OleDbDataAdapter oada = new OleDbDataAdapter("select * from [" + tableName + "]", strConnection);        oada.Fill(dtOld);        conn.Close();       }    catch (Exception ex)    {        conn.Close();    }}

xlsx檔案的中間處理過程因需求而異,在此不再贅述處理方式。在輸入過程中,將檔案中的資料轉化成了Datatable資料類型的格式,它是一個臨時儲存資料的網格虛擬表,處理非常方便。

xlsx檔案的輸出:xlsx檔案的輸出過程並不是很順利,先後使用了三種方式。

第一種方式自然就是OleDB了,有始有終嘛。但是真正使用的過程中發現此方式不僅要求程式運行本機必須安裝Excel,而且對Excel版本要求非常高,如果刪註冊表很容易弄巧成拙,我改註冊表就直接玩壞了Excel。事實上我們並不能保證客戶的機器上一定安裝了對應版本的Excel,所以如果使用OleDB輸出檔案,此用戶端的相容性將非常的低劣。

經過一番溝通和掙紮決定還是換一種方式,決定改用第三方組件。由於JAVA方使用的是POI,所以這邊直接使用POI項目的.NET版本,NPOI。網上教程很多,很好實現,但是經過測試之後,此種方式對大檔案的輸入輸出支援的不是很好,處理DEMO檔案沒有問題,但是換成了真正客戶提供的十萬行級甚至百萬行級的檔案,用戶端直接在輸出的過程中崩掉。

查詢資料後,網友們對於大檔案都建議使用EPPlus。教程也是一抓一大把,我沒有繼續加大檔案大小測試,不過客戶給我們提供的十來個檔案全部測試通過,基本上都是百萬級以下的。

上代碼吧:

private void outputXlsx(){    FileInfo newFile = new FileInfo(dtNew.TableName + ".xlsx");    if (newFile.Exists)    {        newFile.Delete();        newFile = new FileInfo(dtNew.TableName + ".xlsx");    }    using (ExcelPackage package = new ExcelPackage(newFile))    {        ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(dtNew.TableName);//建立worksheet        for (int m = 0; m < dtNew.Columns.Count; m++)        {            worksheet.Cells[1, m + 1].Value = dtNew.Columns[m];        }        int i = 1;        foreach (DataRow dr in dtNew.Rows)        {            for (int j = 0; j < dtNew.Columns.Count; j++)            {                worksheet.Cells[i + 1, j + 1].Value = dr[j];            }            i++;        }        package.Save();//儲存excel    }}
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.