1. 程式人生 > >C#匯入匯出與處理Excel檔案

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

前一段時間接了一個小專案,使用C#寫一個Winform客戶端。主要功能就是根據客戶提供的檔案標準,按照一定的規則和演算法,轉換DBF檔案和Excel檔案(字尾名xlsx為主)。這個客戶端的功能並不複雜,但是細節很多,前前後後從框架到交付大約用了三週的時間。我先闡述使用C#語言處理Excel檔案的一些實踐結論。

由於我處理的是字尾名為xlsx檔案,再次就主講此類檔案了。在Excel檔案的輸入中,使用的就是度娘一找一大片的OleDB

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
    }
}

相關推薦

C#匯入匯出處理Excel檔案

前一段時間接了一個小專案,使用C#寫一個Winform客戶端。主要功能就是根據客戶提供的檔案標準,按照一定的規則和演算法,轉換DBF檔案和Excel檔案(字尾名xlsx為主)。這個客戶端的功能並不複雜,但是細節很多,前前後後從框架到交付大約用了三週的時間。我先闡

java excel大資料量匯入匯出優化

package com.hundsun.ta.utils; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java

php匯出資料為excel檔案

<?php require_once "../excel/PHPExcel.php"; require_once "../excel/PHPExcel/Writer/Excel2007.php"; require_once "../config/database.php"; requir

Oracle 快速將資料匯出到CSV(Excel)檔案的方法及效能比較

註釋:      工作中有需要將線上資料匯出到excel給客戶分析/檢視的情況,如下是方法介紹情況: 方法 1分鐘匯出的資料量 適用於 utl_file讀寫檔案包 300萬

VS2008中自定義C++工程模板修改新建檔案預設編碼的辦法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

使用Python處理Excel檔案的一些程式碼示例

筆記:使用Python處理Excel檔案的一些程式碼示例,以下程式碼來自於《Python資料分析基礎》一書,有刪改 #!/usr/bin/env python3 # 匯入讀取Excel檔案的庫,xlrd,其中的 open_workbook 為讀取工作簿 from xlrd import open_wo

Python處理excel檔案

Python處理excel檔案 ​ 這裡只介紹幾種常用的庫。對於2003以前的excel版本,即.xls檔案,只能用xlrd和xlwt庫來處理;對於2003及以後的excel檔案,即.xlsx檔案,需要使用openpyxl庫來處理,這裡著重介紹這三個第三方庫。 ​ 注:Workboo

在 Node.js 中利用 js-xlsx 處理 Excel 檔案

參考連結:http://scarletsky.github.io/2016/01/30/nodejs-process-excel/ var _headers = [''], _headers_len = _headers.length; headers = _headers.map((v,

C++ 異常捕捉處理(try...catch...)

首先舉一個異常處理的例子: string str = "0123456789"; char ch1 = str[100];    //陣列越界,但是不提醒,程式執行立即崩潰 cout << ch1 << endl;    &n

用sql server匯入匯出功能 把excel匯入到sql的表中,提示匯入成功,但是資料庫表中並沒有資料?

這是典型的操作錯誤問題 在匯入資料的最後一步之前“選擇源表和檢視”步驟中會出現兩個表,這裡假設你是從“ab”表中匯出的資料,那麼這裡會出現“ab”和“ab$”兩個選項,如果選擇上面的選項,則匯入資料肯定為空,應該選擇下面的那個選項,然後將“目的”中表名最後的“$”去掉,然後

詳解python中xlrd包的安裝處理Excel表格

python處理Excel常用到的模組是xlrd。使用xlrd可以非常方便的處理Excel文件,下面這篇文章將給大家詳細介紹python中包xlrd的安裝與利用xlrd處理Excel表格的方法,有需要的朋友們可以參考學習,下面來一起看看吧。 一、安裝xlrd

mysql命令列的匯入匯出sql,txt,excel(都在linux或windows命令列操作)

Mysql匯入匯出sql,txt,excel 首先我們通過命令列進入到mysql安裝目錄的bin目錄下,比如我輸入的命令列為:   d: cd  D:/wamp/bin/mysql/mysql5.6.17/bin 一、匯入匯出sql( linux或windows命令列

C# 用NPOI儲存為Excel檔案

首先下載NPOI元件,版本:NPOI 2.0 下載後新增引用(這裡有.net2.0版和4.0版的,按需引用) 使用方法如下: /// <summary> /// 儲存成excel(NPOI方式) ///

JAVA處理Excel檔案---生成簡單的Excel檔案

 在現實的辦公中,我們常常會有這樣一個要求:要求把報表直接用excel開啟。在實習中有這樣一個需求。根據所選擇的資源查詢使用者所提供附件的全部資訊並生成excel供下載。但是在查詢的時候我們需要來檢

Spring boot實現匯出資料生成excel檔案返回

一、基於框架 1.IDE IntelliJ IDEA 2.軟體環境 Spring boot mysql mybatis org.apache.poi 二、環境整合 1.建立spring boot專案工程 略

list集合轉csv檔案以及servlet匯出csv和excel檔案

public class CsvToListObjectTest { /** * 寫入csv檔案 * @param list * @param fileName * @return */ public sta

C#.net匯出標準的Excel(npoi)

    不管用哪一種語言開發應用程式,匯出功能是最常見的,一般匯出檔案格式最常見的有PDF 、Excel、CSV、Word、TXT等,今天我們在此介紹一下Excel的匯出方法。     微軟提供了匯出Excel的多種辦法,但是今天我們在這裡只介紹一種第三方的匯出方法,因為它

獲取jqGrid中的所有資料匯出並生成Excel檔案流供使用者下載(post請求實現檔案下載)

最近有一個需求是: 將jqGrid表格中的資料生成報表Excel檔案返回給使用者。 我的想法是獲取jqGrid中的資料然後生成json資料,傳給後端,生成檔案流,響應到前端,儲存為excel檔案。 ajax為什麼不能夠實現下載檔案 ajax的返回值型別是json,text

Python批量處理Excel檔案到同一檔案的不同sheet上(未完...)

存在每次活動整理的Excel資料檔案,需放在一個Excel上進行儲存#-*-coding:utf-8-*- import os import pandas as pd path='' files=os.

python高手之路python處理excel檔案

用python來自動生成excel資料檔案。python處理excel檔案主要是第三方模組庫xlrd、xlwt、xluntils和pyExcelerator,除此之外,python處理excel還可以用win32com和openpyxl模組。 方法一