EKsumic's Blog

let today = new Beginning();

Click the left button to use the catalog.

OR

如何在C#裏用DataGridView導出Excel

第一步,在Visual Studio的環境中,打開這個項目自帶的powershell。(中間正下方)

它的名字可能叫Package Manager Console。*(當然你自己開Powershell切換到該項目目錄也是一樣,只不過直接用IDE的工具更方便)

在裏面輸入命令:

Install-Package EPPlus

等待完成。

 

然後新建一個類:

using System;
using System.Data;
using System.Windows.Forms;
using OfficeOpenXml;
using OfficeOpenXml.Style;
using System.IO;

public class ExcelExporter
{
    public static void ExportDataGridViewToExcel(DataGridView dataGridView)
    {
        try
        {
            using (var package = new ExcelPackage())
            {
                var worksheet = package.Workbook.Worksheets.Add("ExportedFromDataGridView");

                // 添加列標題
                for (int i = 0; i < dataGridView.Columns.Count; i++)
                {
                    worksheet.Cells[1, i + 1].Value = dataGridView.Columns[i].HeaderText;
                }

                // 添加行數據
                for (int i = 0; i < dataGridView.Rows.Count; i++)
                {
                    for (int j = 0; j < dataGridView.Columns.Count; j++)
                    {
                        worksheet.Cells[i + 2, j + 1].Value = dataGridView.Rows[i].Cells[j].Value?.ToString();
                    }
                }

                // 设置列寬自適應
                worksheet.Cells.AutoFitColumns();

                // 保存EXCEL文件
                var saveFileDialog = new SaveFileDialog();
                saveFileDialog.Filter = "Excel files (*.xlsx)|*.xlsx";
                saveFileDialog.FilterIndex = 2;
                saveFileDialog.RestoreDirectory = true;
                saveFileDialog.Title = "Save Excel File";

                if (saveFileDialog.ShowDialog() == DialogResult.OK)
                {
                    File.WriteAllBytes(saveFileDialog.FileName, package.GetAsByteArray());
                    MessageBox.Show("Export Successful");
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show($"An error occurred: {ex.Message}");
        }
    }
}

注意using的命名空間可能冗餘,你可酌情刪除。

 

這個類的使用方式:

private void btn_ExportToExcel_Click(object sender, EventArgs e)
{
    ExcelExporter.ExportDataGridViewToExcel(dataGridView1);
}

對,這是個winform項目的演示,你需要創建winform並創建一個按鈕來執行這個方法。

 

導出excel的方法其實office的dll引用也能做出來,但是可能需要你有安裝office,或者引用的時候出現別的什麽缺失或版本不一致的問題。

 

EPPlus的方法,可以讓你直接最快導出Excel。

這個方法在2024/07/19目前仍然是生效的。

This article was last edited at 2024-07-19 09:46:57

* *