C# で Excel ファイルをインポート、エクスポート、処理する方法

伊谢尔伦
リリース: 2016-11-21 11:28:39
オリジナル
1405 人が閲覧しました

OleDB は、さまざまなデータ ソースへの Microsoft の戦略的な低レベル アプリケーション プログラミング インターフェイスです。このクライアントでは、さまざまな種類のデータベースがサポートされており、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 ファイルの出力プロセスはあまりスムーズではなく、3 つの方法が使用されます。

最初の方法は当然 OleDB であり、始まりと終わりがあります。しかし、実際に使ってみると、この方法はプログラムを実行するためにコンピューターに Excel がインストールされている必要があるだけでなく、Excel のバージョンに対する要件も非常に高く、レジストリを削除すると自滅してしまいます。レジストリを変更するとExcelが直接破壊されてしまいます。実際、対応するバージョンの Excel が顧客のマシンにインストールされている必要があることは保証できません。そのため、OleDB を使用してファイルを出力する場合、このクライアントの互換性は非常に低くなります。

いくつかのコミュニケーションと格闘の後、方法を変更し、サードパーティのコンポーネントを使用することにしました。 JAVA 側は POI を使用するため、ここでは POI プロジェクトの .NET バージョンである NPOI が直接使用されます。オンライン チュートリアルが多数あり、実装は簡単ですが、テストした結果、この方法は大きなファイルの入出力をあまりサポートしていません。デモ ファイルの処理には問題ありませんが、10 万または 100 万ものファイルに置き換えられます。実際の顧客から提供されたレベル ファイルを使用すると、クライアントは出力プロセス中に直接クラッシュします。

情報を確認した後、ネチズンは大きなファイルにはEPPlusを使用することを推奨しました。チュートリアルも多数あり、テストのためにファイル サイズを増やすことはしませんでしたが、お客様から提供された数十のファイルはすべてテストに合格し、基本的には 100 万未満でした。

コードに移動します:

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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート