• 使用EPPlus读写excel文件并保存


    之前在网上看到大部分的意见都认为“对于Excel 97-2003格式,还是用NPOI最好;而对于2007(xlsx)以上版本,可以使用EPPlus”。然后在实际操作中有发现,使用NPOI的话,读取xlsx文件会出点问题,但是写入的话,个人感觉EPPlus语言简洁美观点(此地仅个人感官,实际使用以个人为主)

    关于excel读写,网上还找的别的:

    1. NPOI(http://npoi.codeplex.com/)
    2. MyXls(http://sourceforge.net/projects/myxls/)
    3. Koogra(http://sourceforge.net/projects/koogra/)
    4. ExcelLibrary(http://code.google.com/p/excellibrary/)
    5. ExcelPackage(http://excelpackage.codeplex.com/)
    6. EPPlus(http://epplus.codeplex.com/)
    7. LinqToExcel(http://code.google.com/p/linqtoexcel/)

    此地暂时仅介绍EPPlus

    EPPlus读取excel:

    using (ExcelPackage package = new ExcelPackage(new FileStream(path, FileMode.Open)))
    {
        for (int i = 1; i <= package.Workbook.Worksheets.Count; ++i)
        {
            ExcelWorksheet sheet = package.Workbook.Worksheets[i];
            for (int j = sheet.Dimension.Start.Column, k = sheet.Dimension.End.Column; j <= k; j++)
            {
                for (int m = sheet.Dimension.Start.Row, n = sheet.Dimension.End.Row; m <= n; m++)
                {
                    string str = GetValue(sheet, m, j);
                    if (str != null)
                    {
                        // do something
                    }
                }
            }
        }
    }

    EPPlus写入excel:

    using (ExcelPackage package = new ExcelPackage())
    {
        ExcelWorksheet sheet = package.Workbook.Worksheets.Add("Sheet1");
        sheet.Cells[1, 1].Value = "1";
        sheet.Cells[1, 2].Value = "2";
        sheet.Cells[1, 3].Value = "3";
        sheet.Cells[1, 4].Value = "4";
        sheet.Cells[1, 5].Value = "5";
        sheet.Cells[1, 6].Value = "6";
        using (Stream stream = new FileStream(path, FileMode.Create))
        {
            package.SaveAs(stream);
        }
    }

    合并单元格:

    worksheet.Cells[fromRow, fromCol, toRow, toCol].Merge = true; 

    excel样式设置:

    //表头样式(后面三个感觉没起作用)
    worksheet.Row(1).Height = 30;  //设置高度
    worksheet.Row(1).Style.Font.Bold = true; //字体加粗
    worksheet.Row(1).Style.Font.Size = 11;  //字体大小
    worksheet.Row(1).Style.Font.Name = "微软雅黑";  //字体
    worksheet.Column(columnIndex).Width = 30;  //设置列宽

    worksheet.DefaultRowHeight = 27;//设置单元格默认行高 worksheet.Cells.Style.ShrinkToFit = true;//单元格自动适应大小 worksheet.Cells.Style.WrapText = true;//自动换行 worksheet.Cells.Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));//设置单元格所有边框 worksheet.Cells.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;//设置单元格水平居中 worksheet.Cells.Style.VerticalAlignment = ExcelVerticalAlignment.Center;//设置单元格垂直居中

    下面提供完整demo

         /// <summary>
            /// 导出供应商考核表
            /// </summary>
            /// <returns></returns>
            public IActionResult ExportSupplierAssessment(RaterType type)
            {
                ResultResponse<string> result = new ResultResponse<string>();
    
                string webRootPath = _hostingEnvironment.WebRootPath;
    
                //考核表文件夹
                string folder_download = ConfigurationHelper.GetSingleNode("Download_Assessment");
                //虚拟目录
                string appUrl = ConfigurationHelper.GetSingleNode("File_AppUrl");
    
                try
                {
                    //生成考核表文件夹
                    var folderPath_download = Path.Combine(webRootPath, folder_download);
                    if (!System.IO.Directory.Exists(folderPath_download))
                    {
                        System.IO.Directory.CreateDirectory(folderPath_download);
                    }
    
                    string fileName_download = $"供应商考核{EnumExtension.GetDescription(type)}打分表" + DateTime.UtcNow.AddHours(8).ToString("yyyyMMddHHmmss") + ".xls";
                    FileInfo file = new FileInfo(Path.Combine(webRootPath, folder_download, fileName_download));
                    using (ExcelPackage package = new ExcelPackage(file))
                    {
                        // 添加worksheet
                        ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("供应商考核表");
                        var columnWidth = 10;
    
                        //添加头
                        worksheet.Cells[1, 1].Value = "类别";
                        worksheet.Cells[1, 2].Value = "供应商类别";
                        worksheet.Cells[1, 3].Value = "供应商名称";
                        //worksheet.Cells[1, 3].Value = "平均得分";
                        worksheet.Cells[1, 4].Value = "序号";
                        worksheet.Cells[1, 5].Value = "项目名称";
    
                        var endCells = 10;
                        //学校评分
                        if (type == RaterType.School)
                        {
                            worksheet.Cells[1, 6].Value = "书面考核所占比例";
                            worksheet.Cells[1, 7].Value = "书面考核分";
                            worksheet.Cells[1, 8].Value = "学校考核所占比例";
                            worksheet.Cells[1, 9].Value = "学校评分";
                            worksheet.Cells[1, 10].Value = "备注";
                        }
                        //监理评分
                        else if (type == RaterType.Supervisor)
                        {
                            worksheet.Cells[1, 6].Value = "监理考核所占比例";
                            worksheet.Cells[1, 7].Value = "监理评分";
                            worksheet.Cells[1, 8].Value = "备注";
                            endCells = 8;
                        }
                        else
                        {
                            worksheet.Cells[1, 6].Value = "校产站考核所占比例";
                            worksheet.Cells[1, 7].Value = "计划部评分";
                            worksheet.Cells[1, 8].Value = "施工部评分";
                            worksheet.Cells[1, 9].Value = "设备部评分";
                            worksheet.Cells[1, 10].Value = "备注";
                        }
                        //表头样式(后面三个貌似不起作用)
                        //worksheet.Row(1).Height = 30;  //设置高度
                        //worksheet.Row(1).Style.Font.Bold = true; //字体加粗
                        //worksheet.Row(1).Style.Font.Size = 11;  //字体大小
                        //worksheet.Row(1).Style.Font.Name = "微软雅黑";  //字体
    
    
                        //设置列宽
                        for (int i = 1; i < 11; i++)
                        {
                            worksheet.Column(i).Width = i == 3 || i == 5 ? 30 : columnWidth;
                        }
                        worksheet.DefaultRowHeight = 27;//设置单元格默认行高
                        worksheet.Cells.Style.ShrinkToFit = true;//单元格自动适应大小
                        worksheet.Cells.Style.WrapText = true;//自动换行
                        worksheet.Cells.Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));//设置单元格所有边框
                        worksheet.Cells.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;//设置单元格水平居中
                        worksheet.Cells.Style.VerticalAlignment = ExcelVerticalAlignment.Center;//设置单元格垂直居中
    
                        //从第一行之后开始写
                        var row = 1;
    
                        //添加值
                        var supplierScoreList = _supplierScoreAppService.GetSupplierScoreListByWait().Data;
                        if (supplierScoreList != null)
                        {
                            foreach (var score in supplierScoreList)
                            {
                                var assessmentList = _supplierAssessmentAppService.GetSupplierAssessmentListBySupplierScoreUid(score.Uid).Data;
                                if (assessmentList != null)
                                {
                                    var index = 0;   //项目序号
                                    foreach (var assessment in assessmentList)
                                    {
                                        index++;
                                        row++;
    
                                        worksheet.Row(row).CustomHeight = true;//自动调整行高
    
                                        //公共部分
                                        worksheet.Cells[$"A{row}"].Value = EnumExtension.GetDescription(score.SupplierType);
                                        worksheet.Cells[$"B{row}"].Value = score.SupplierCategoryName;
                                        worksheet.Cells[$"C{row}"].Value = score.SupplierName;
                                        worksheet.Cells[$"D{row}"].Value = index;
                                        worksheet.Cells[$"E{row}"].Value = assessment.ProjectName;
    
                                        switch (type)
                                        {
                                            case RaterType.School:
                                                worksheet.Cells[$"F{row}"].Value = assessment.WrittenRatio;
                                                worksheet.Cells[$"G{row}"].Value = assessment.WrittenScore;
                                                worksheet.Cells[$"H{row}"].Value = assessment.SchoolRatio;
                                                worksheet.Cells[$"I{row}"].Value = assessment.SchoolScore;
                                                worksheet.Cells[$"G{row}"].Value = assessment.Remark;
                                                break;
                                            case RaterType.Supervisor:
                                                worksheet.Cells[$"F{row}"].Value = assessment.SupervisorRatio;
                                                worksheet.Cells[$"G{row}"].Value = assessment.SupervisorScore;
                                                worksheet.Cells[$"H{row}"].Value = assessment.Remark;
                                                break;
                                            case RaterType.Inside:
                                                worksheet.Cells[$"F{row}"].Value = assessment.InsideRatio;
                                                worksheet.Cells[$"G{row}"].Value = assessment.PlanScore;
                                                worksheet.Cells[$"H{row}"].Value = assessment.ConstructionScore;
                                                worksheet.Cells[$"I{row}"].Value = assessment.EquipmentScore;
                                                worksheet.Cells[$"G{row}"].Value = assessment.Remark;
                                                break;
                                            default:
                                                break;
                                        }
                                    }
                                    if (assessmentList.Count > 1)
                                    {
                                        //合并单元格
                                        var startRow = row - assessmentList.Count() + 1;
                                        worksheet.Cells[startRow, 1, row, 1].Merge = true;  //类型
                                        worksheet.Cells[startRow, 2, row, 2].Merge = true;  //供应商类别
                                        worksheet.Cells[startRow, 3, row, 3].Merge = true;  //供应商名称
                                    }
                                }
                            }
                        }
    
                        package.Save();
                    }
                    //写入文件
                    File(fileName_download, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", true);
    
                    //前台访问路径
                    var filePath = $"{Request.Host}/" + appUrl + $"/{folder_download}/{fileName_download}";
                    result.Data = filePath;
                }
                catch (Exception ex)
                {
                    NullLogger.Instance.Info(ex.Message, ex);
                }
                return Ok(result);
            }
  • 相关阅读:
    HTTP状态代码
    安装mySQL数据库常见问题
    python3.6安装版本选择
    用连接池提高Servlet访问数据库的效率
    策略模式
    如何在vue项目中修改less变量,多主题项目解决方案
    【前端】vue项目 url中传递数组参数
    element date-picker默认值问题
    echart 折线图legend不显示的问题
    vue学习之父子组件通信两种方法
  • 原文地址:https://www.cnblogs.com/xiaoxiaomini/p/15138750.html
Copyright © 2020-2023  润新知