C#如何匯入匯出與處理Excel文件

伊谢尔伦
發布: 2016-11-21 11:28:39
原創
1336 人瀏覽過

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
    }
}
登入後複製


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!