首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> .NET 實例教學

C# DataTable 匯出文字檔完整範例:StreamWriter 與 SaveFileDialog 實作

     編輯:.NET 實例教學

將 DataTable 資料存為文字檔:完整 WinForms 實作範例

核心程式碼

using System.IO;
using System.Text;
using System.Windows.Forms;

private void btnExport_Click(object sender, EventArgs e) {
    try {
        DataTable dt = GetGridData(); // 取得資料來源
        WriteDataTableToText(dt);
        MessageBox.Show("匯出成功!");
    } catch (Exception ex) {
        MessageBox.Show("匯出失敗:" + ex.Message);
    }
}

private void WriteDataTableToText(DataTable dt) {
    string tempPath = Path.Combine(Application.StartupPath, "TempExport.txt");
    StringBuilder sb = new StringBuilder();

    // 寫入標題列 (可自訂)
    sb.AppendLine("注數\t紅1\t紅2\t紅3\t紅4\t紅5\t紅6\t藍1\t藍2");

    foreach (DataRow row in dt.Rows) {
        for (int i = 0; i < dt.Columns.Count; i++) {
            sb.Append(row[i].ToString());
            if (i < dt.Columns.Count - 1) sb.Append('\t');
        }
        sb.AppendLine();
    }

    File.WriteAllText(tempPath, sb.ToString(), Encoding.Default); // 或 UTF8

    // 另存新檔對話框
    using (SaveFileDialog sfd = new SaveFileDialog()) {
        sfd.Filter = "文字檔 (*.txt)|*.txt|所有檔案 (*.*)|*.*";
        sfd.FileName = "Export_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".txt";
        if (sfd.ShowDialog() == DialogResult.OK) {
            File.Copy(tempPath, sfd.FileName, true);
        }
    }

    // 清理暫存檔
    if (File.Exists(tempPath)) File.Delete(tempPath);
}

關鍵技術點

  • StringBuilder:高效組合大量字串,避免重複記憶體配置
  • File.WriteAllText:.NET 2.0+ 一次寫入,自動處理 Stream 開關
  • Encoding.Default:相容舊系統 (ANSI),需支援 Unicode 可用 Encoding.UTF8
  • SaveFileDialog:提供使用者選擇儲存位置與檔名
  • 暫存檔機制:先寫固定路徑,再複製至使用者指定路徑,簡化邏輯

進階擴充建議

  • 支援自訂分隔符 (Tab, Comma, Pipe)
  • 加入欄位標題自動產生選項
  • 大量資料分批寫入 (StreamWriter 逐行) 避免記憶體壓力
  • 匯出進度報告 (BackgroundWorker/Task + Progress<T>)
  • 支援 CSV RFC 4180 標準 (雙引號逸出、換行處理)

常見坑點提醒

  1. 資料含換行符需決定是否置換或加引號
  2. 編碼不匹配導致中文亂碼 (建議統一 UTF-8 with BOM)
  3. 檔案被佔用時複製失敗 (需 try-catch 處理 IOException)
  4. 超大資料集記憶體不足 (改用 StreamWriter 串流寫入)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved