• C#WinFrom导出Excel


    采用的是以DataGridView的形式导出,使用NPOI.dll

    1.由于使用的是DataGridView,所以类需要创建在From的Project下,DLL导入NPOI

     2.代码如下

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using NPOI.SS.UserModel;        //NPOI
    using NPOI.HSSF.Util;           //NPOI
    using NPOI.HSSF.UserModel;      //NPOI
    using NPOI.XSSF.UserModel;      //NPOI
    using System.IO;
    namespace ESMT
    {
        public class ExportExcel
        {
            /// <summary>
            /// 
            /// </summary>
            /// <param name="grdview">数据表</param>
            /// <param name="sheetName">工作簿名字</param>
            /// <param name="FilePath">文件路径</param>
            /// <param name="columnTitle">列头</param>
            public void ExportToExcel(DataGridView grdview, string sheetName, string FilePath, string[] columnTitle)
            {
    
                //不允许dataGridView显示添加行,负责导出时会报最后一行未实例化错误
                grdview.AllowUserToAddRows = false;
                HSSFWorkbook workbook = new HSSFWorkbook();
                ISheet sheet = workbook.CreateSheet(sheetName);//创建工作簿
                //设置表头
                IRow headerRow = sheet.CreateRow(0);//创建第一行
                headerRow.HeightInPoints = 40;
                headerRow.CreateCell(0).SetCellValue("出库表单");//单元格赋值
                ICellStyle headStyle = workbook.CreateCellStyle();
                headStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;//格式居中
                IFont font = workbook.CreateFont();
                font.Boldweight = 500;
                font.FontHeightInPoints = 20;
                headStyle.SetFont(font);
                headerRow.GetCell(0).CellStyle = headStyle;
                sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, grdview.ColumnCount - 2));//单元格合并 最后个参数是合并个数
    
                IRow headerRow2 = sheet.CreateRow(1);//创建第二行列头
                ICellStyle headStyle2 = workbook.CreateCellStyle();
                headStyle2.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                IFont font2 = workbook.CreateFont();
                font2.FontHeightInPoints = 10;
                font2.Boldweight = 700;
                headStyle2.SetFont(font2);
                for (int l = 0; l < grdview.ColumnCount - 1; l++) //列头填值
                {
                    headerRow2.CreateCell(l).SetCellValue(columnTitle[l]);
                    headerRow2.GetCell(l).CellStyle = headStyle2;
                }
    
                //设置列宽
                for (int l = 0; l < grdview.Columns.Count; l++)
                {
                    sheet.DefaultColumnWidth = 15;
                }
    
                //填写内容
                for (int i = 0; i < grdview.Rows.Count; i++)
                {
                    IRow row = sheet.CreateRow(i + 2);
                    for (int j = 1; j < grdview.Columns.Count; j++)
                    {
                        row.CreateCell(j - 1, CellType.String).SetCellValue(grdview.Rows[i].Cells[j].Value.ToString());//j-1表示哪个单元格
                    }
                }
    
                using (FileStream stream = File.OpenWrite(FilePath))//创建Excel并写入数据
                {
                    workbook.Write(stream);
                    stream.Close();
                }
                GC.Collect();
            }
        }
    }
    ExportExcel

    PS:openwtrie 打开或者创建新的文件写入

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using NPOI.SS.UserModel;        //NPOI
    using NPOI.HSSF.Util;           //NPOI
    using NPOI.HSSF.UserModel;      //NPOI
    using NPOI.XSSF.UserModel;      //NPOI
    using System.IO;
    namespace ESMT
    {
        public class ExportExcel
        {
            /// <summary>
            /// ExportToExcel
            /// </summary>
            /// <param name="grdview">数据表</param>
            /// <param name="sheetName">工作簿名字</param>
            /// <param name="FilePath">文件路径</param>
            /// <param name="columnTitle">列头</param>
            public bool ExportToExcel(DataGridView grdview, string sheetName, string FilePath, string[] columnTitle, bool ischeckbox)
            {
                try
                {
                    //不允许dataGridView显示添加行,负责导出时会报最后一行未实例化错误
                    grdview.AllowUserToAddRows = false;
                    HSSFWorkbook workbook = new HSSFWorkbook();
                    ISheet sheet = workbook.CreateSheet(sheetName);//创建工作簿
    
                    //设置表头
                    IRow headerRow = sheet.CreateRow(0);//创建第一行
                    headerRow.HeightInPoints = 40;
                    headerRow.CreateCell(0).SetCellValue("出库表单");//单元格赋值
    
                    ICellStyle headStyle = workbook.CreateCellStyle();//
                    headStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;//格式居中
                    headStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;//格式居中
    
                    IFont font = workbook.CreateFont();
                    font.Boldweight = 500;
                    font.FontHeightInPoints = 20;
                    headStyle.SetFont(font);//设置了第一行样式的字体
    
                    headerRow.GetCell(0).CellStyle = headStyle;
                    sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, grdview.ColumnCount - 2));//单元格合并 最后个参数是合并个数
    
                    IRow headerRow2 = sheet.CreateRow(1);//创建第二行列头
                    ICellStyle headStyle2 = workbook.CreateCellStyle();//设置第二行的样式
                    headStyle2.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                    IFont font2 = workbook.CreateFont();
                    font2.FontHeightInPoints = 10;
                    font2.Boldweight = 700;
                    headStyle2.SetFont(font2);
    
                    ICellStyle headStyle3 = workbook.CreateCellStyle();//内容的样式
                    headStyle3.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;//格式居中
                    headStyle3.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;//格式居中
    
                    for (int l = 0; l < grdview.ColumnCount - 1; l++) //列头填值 
                    {
                        headerRow2.CreateCell(l).SetCellValue(columnTitle[l]);
                        headerRow2.GetCell(l).CellStyle = headStyle2;
                    }
                    //设置默认列宽
                    //sheet.DefaultColumnWidth = 15;
    
                    //设置列宽
                    AutoColumnWidth(sheet, grdview.ColumnCount);
    
                    //填写内容
                    for (int i = 0; i < grdview.Rows.Count; i++)
                    {
                        IRow row = sheet.CreateRow(i + 2);
                        for (int j = 1; j < grdview.Columns.Count; j++)
                        {
                            if (ischeckbox)
                            {//带checkbox的DataGrid
                                row.CreateCell(j - 1, CellType.String).SetCellValue(grdview.Rows[i].Cells[j].Value.ToString());
                                row.GetCell(j - 1).CellStyle = headStyle3;
                            }//j-1表示哪个单元格                   
                            else
                            {
                                row.CreateCell(j - 1, CellType.String).SetCellValue(grdview.Rows[i].Cells[j - 1].Value.ToString());//j-1表示哪个单元格
                                row.GetCell(j - 1).CellStyle = headStyle3;
                            }
                        }
                    }
    
                    using (FileStream stream = File.OpenWrite(FilePath))//创建Excel并写入数据
                    {
                        workbook.Write(stream);
                        stream.Close();
                    }
                    GC.Collect();
                    return true;//导出成功
                }
                catch (Exception)
                {
    
                    return false;//导出失败
                }
            }
            /// <summary>
            /// 自适应列宽
            /// </summary>
            /// <param name="sheet"></param>
            /// <param name="cols"></param>
            public void AutoColumnWidth(ISheet sheet, int cols)
            {
                for (int col = 0; col < cols - 1; col++)//个数和列头个数统一
                {
                    sheet.AutoSizeColumn(col);//自适应宽度,但是其实还是比实际文本要宽
                    int columnWidth = sheet.GetColumnWidth(col) / 256;//获取当前列宽度
                    for (int rowIndex = 1; rowIndex <= sheet.LastRowNum; rowIndex++)
                    {
                        IRow row = sheet.GetRow(rowIndex);
                        ICell cell = row.GetCell(col);
                        int contextLength = Encoding.UTF8.GetBytes(cell.ToString()).Length;//获取当前单元格的内容宽度
                        columnWidth = columnWidth < contextLength ? contextLength : columnWidth;
    
                    }
                    sheet.SetColumnWidth(col, columnWidth * 400);//设置列宽
    
                }
            }
        }
    
    }
    改善版1.0

    3.From窗口点击导出按钮

     string[] columnTitle = { "序号", "仓位", "Facility", "供应商料号", "料号", "料卷ID", "料卷数量", "储位号", "Date Code/Lot", "生产日期", "供应商编码", "入仓时间" };
                string localFilePath = "";// fileNameExt, newFileName, FilePath; 
                SaveFileDialog sfd = new SaveFileDialog();//保存文件窗口
                //设置文件类型 
                sfd.Filter = "Excel(97-2003)|*.xls";//保存类型为EXCEL
                //保存对话框是否记忆上次打开的目录 
                sfd.RestoreDirectory = true;
    
                //点了保存按钮进入 
                if (sfd.ShowDialog() == DialogResult.OK)
                {
                    localFilePath = sfd.FileName.ToString(); //获得文件路径 
                    ex.ExportToExcel(grdData, "出库表单", localFilePath, columnTitle);
                }
    导出按钮

    通过以上三步,完成点击导出按钮,后选择保存位置并命名,调用EportExcel方法完成导出Excel。

    PS:使用DataTable的操作是一样,只是赋值的时候取DataTable的值。GC 是自动垃圾收集  如果没有Checkbox的时候可以加入一个判断标记为 传参的时候加入,根据标记为来改变赋值情况。 

  • 相关阅读:
    hdu3001 Travelling
    android 对一个合并后的联系人选择编辑,手机屏幕会缓慢变暗后再进入编辑界面的问题
    数组指针与指针数组 函数指针与指针函数
    CF:322D
    QRadioButton类中Toggled()信号的使用方法
    Android---App Widget(四)
    github 坑爹的仓库初始化设置
    Failed to load session “ubuntu” -- 12.04
    Linux下的图形界面——X Window的安装
    用户管理操作示例
  • 原文地址:https://www.cnblogs.com/cdjbolg/p/11771546.html
Copyright © 2020-2023  润新知