C#: 创建Excel文件并在Excel中写入数据库中的数据

发布于:2025-02-19 ⋅ 阅读:(15) ⋅ 点赞:(0)

实现思路:
1.检查数据是否可导出
2.弹出文件保存对话框
3.删除已存在的同名文件
4.创建 Excel 应用实例
5.导出表头
6.导出数据
7.保存 Excel 文件
8.释放 Excel 资源
9.导出成功提示

static void ExportToExcel(DataTable Data, string fileName)
{    
    // 如果表格中没有行,提示用户无数据可导出
    if (Data.Rows.Count == 0)
    {
        return;
    }
    // 声明保存文件的对话框
    SaveFileDialog saveFileDialog = new SaveFileDialog();
    saveFileDialog.DefaultExt = "xls"; // 设置默认后缀
    string FilterFile = "文件";
    saveFileDialog.Filter = "EXCEL" + FilterFile + " (*.XLS) |*.xls|EXCEL " + FilterFile + " (*.XLSX)|*.xlsx"; // 文件类型过滤
    saveFileDialog.InitialDirectory = System.IO.Directory.GetCurrentDirectory(); // 设置默认路径为当前程序路径
    saveFileDialog.FileName = fileName; // 设置默认文件名
    
    // 打开保存对话框,用户取消则退出
    if (saveFileDialog.ShowDialog() == DialogResult.Cancel)
    {
        return;
    }

    // 获取用户输入的文件路径
    string fileNameString = saveFileDialog.FileName;

    // 如果文件路径为空,直接退出
    if (fileNameString.Trim() == " ")
    {
        return;
    }

    // 获取表格行数和列数
    int rowscount = Data.Rows.Count;
    int colscount = Data.ColumnCount;

    // 验证行数和列数的合法性
    if (rowscount <= 0 || colscount <= 0 || rowscount > 65536 || colscount > 255)
    {
        return; // 行数或列数非法直接退出
    }

    // 如果文件已存在,尝试删除
    System.IO.FileInfo file = new System.IO.FileInfo(fileNameString);
    if (file.Exists)
    {
        try
        {
            file.Delete();
        }
        catch (Exception error)
        {
            return;
        }
    }

    // 声明 Excel 应用程序对象
    Microsoft.Office.Interop.Excel.Application objExcel = null;
    Microsoft.Office.Interop.Excel.Workbook objWorkbook = null;
    Microsoft.Office.Interop.Excel.Worksheet objsheet = null;

    try
    {
        objExcel = new Microsoft.Office.Interop.Excel.Application(); // 创建 Excel 应用实例
        objWorkbook = objExcel.Workbooks.Add(System.Reflection.Missing.Value); // 新建工作簿
        objsheet = (Microsoft.Office.Interop.Excel.Worksheet)objWorkbook.ActiveSheet; // 获取活动工作表

        objExcel.Visible = false; // 设置 Excel 不可见

        // 写入表头到 Excel
        int displayColumnsCount = 1; // 可见列的计数器,Excel 的列索引从 1 开始,所以 displayColumnsCount = 1。
        for (int i = 0; i <= Data.ColumnCount - 1; i++)
        {
            if (Data.Columns[i].Visible == true) // 只导出可见列
            {
                objExcel.Cells[1, displayColumnsCount] = Data.Columns[i].HeaderText.Trim();
                displayColumnsCount++;
            }
        }

        // 写入数据到 Excel
        for (int row = 0; row <= Data.RowCount - 1; row++)
        {
            displayColumnsCount = 1; // 重置列计数器
            for (int col = 0; col < colscount; col++)
            {
                if (Data.Columns[col].Visible == true) // 只导出可见列
                {
                    try
                    {
                        ((Microsoft.Office.Interop.Excel.Range)objExcel.Cells[row + 2, displayColumnsCount]).NumberFormatLocal = "@"; // 设置单元格格式为文本
                        objExcel.Cells[row + 2, displayColumnsCount] = Data.Rows[row].Cells[col].Value.ToString().Trim(); // 写入单元格数据
                        displayColumnsCount++;
                    }
                    catch (Exception)
                    {
                        // 忽略单元格写入错误
                    }
                }
            }
        }

        objsheet.Columns.EntireColumn.AutoFit(); // 设置列宽自适应

        // 保存 Excel 文件
        objWorkbook.SaveAs(fileNameString, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
            System.Reflection.Missing.Value, System.Reflection.Missing.Value,
            Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
            System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
    }
    catch (Exception error)
    {
        error.ErrorProcessing.WriteErrrorLog(error.ToString()); // 写入错误日志
    }
    finally
    {
        // 关闭 Excel 应用程序
        if (objWorkbook != null)
        {
            objExcel.DisplayAlerts = false; // 禁止弹出警告框
            objExcel.AlertBeforeOverwriting = false; // 禁止覆盖警告
            objWorkbook.Close(System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
        }
        if (objExcel != null && objExcel.Workbooks != null)
        {
            objExcel.Workbooks.Close();
        }
        if (objExcel != null)
        {
            objExcel.Quit(); // 退出 Excel 应用程序
        }

        objsheet = null; // 释放工作表对象
        objWorkbook = null; // 释放工作簿对象
        objExcel = null; // 释放 Excel 应用对象
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到