• .NET Core使用NPOI导出复杂,美观的Excel详解


    前言:

    这段时间一直专注于数据报表的开发,当然涉及到相关报表的开发数据导出肯定是一个不可避免的问题啦。客户要求要导出优雅,美观的Excel文档格式的来展示数据,当时的第一想法就是使用NPOI开源库来做数据导出Excel文档(当时想想真香,网上随便搜一搜教程一大堆),但是当自己真正的实践起来才知道原来想要给不同的单元格设置相关的字体样式、边框样式以及单元格样式一个简单的样式需要写这么多行代码来实现。作为一个喜欢编写简洁代码的我而言肯定是受不了的,于是乎提起袖子说干就干,我自己根据网上的一些资料自己封装了一个通用的NPOI导出Excel帮助类,主要包括行列创建,行内单元格常用样式封装(如:字体样式,字体颜色,字体大小,单元格背景颜色,单元格边框,单元格内容对齐方式等常用属性),希望在以后的开发中能够使用到,并且也希望能够帮助到更多有需要的同学。

    一、引入NPOI NuGet:

    NPOI GitHub源码地址:

    https://github.com/tonyqus/npoi

    版本说明:

      NPOI 2.4.1 (注意不同版本可能使用的姿势有点小差别)

    程序包管理器控制台输入一下命令安装:

    Install-Package NPOI -Version 2.4.1

    通过NuGet管理解决方案安装:

    选择=>工具=>NuGet包管理器=>程序包管理器控制台:

     搜索:NPOI进行安装:

     二、导出Excel文档内容展示格式如下如所示:

     三、CellStyle单元格常用样式概述:

    1. HSSFCellStyle cellStyle = (HSSFCellStyle)workbook.CreateCellStyle(); //创建列头单元格实例样式
    2. cellStyle.Alignment = hAlignment; //水平布局方式(HorizontalAlignment hAlignment)
    3. cellStyle.VerticalAlignment = vAlignment; //垂直布局方式(VerticalAlignment vAlignment)
    4. cellStyle.WrapText =false;//是否自动换行
    5. //TODO:十分注意,要设置单元格背景色必须是FillForegroundColor和FillPattern两个属性同时设置,否则是不会显示背景颜色
    6. //如下设置黄色背景色
    7. cellStyle.FillForegroundColor = cellBackgroundColor;//单元格背景颜色(short cellBackgroundColor = HSSFColor.Yellow.Index)
    8. cellStyle.FillPattern = fillPattern;//填充图案样式(FineDots 细点,SolidForeground立体前景,isAddFillPattern=true时存在(FillPattern fillPattern = FillPattern.SolidForeground)
    9. //设置单元格边框样式
    10. //常用的边框样式 None(没有),Thin(细边框,瘦的),Medium(中等),Dashed(虚线),Dotted(星罗棋布的),Thick(厚的),Double(双倍),Hair(头发)[上右下左顺序设置]
    11. cellStyle.BorderBottom = BorderStyle.Thin;
    12. cellStyle.BorderRight = BorderStyle.Thin;
    13. cellStyle.BorderTop = BorderStyle.Thin;
    14. cellStyle.BorderLeft = BorderStyle.Thin;
    15. //设置单元格边框颜色[上右下左顺序设置]
    16. cellStyle.TopBorderColor = HSSFColor.DarkGreen.Index;//DarkGreen(黑绿色)
    17. cellStyle.RightBorderColor = HSSFColor.DarkGreen.Index;
    18. cellStyle.BottomBorderColor = HSSFColor.DarkGreen.Index;
    19. cellStyle.LeftBorderColor = HSSFColor.DarkGreen.Index;

    四、Font字体常用属性概述:

    1. var cellStyleFont = (HSSFFont)workbook.CreateFont();//创建字体对象实例
    2. //假如字体大小只需要是粗体的话直接使用下面该属性即可
    3. cellStyleFont.IsBold = true;
    4. //或者通过下面属性,设置字体weight来设置字体是否加粗
    5. cellStyleFont.Boldweight = boldWeight; //字体加粗(字体加粗 (None = 0,Normal = 400,Bold = 700)
    6. cellStyleFont.FontHeightInPoints = fontHeightInPoints; //字体大小(short fontHeightInPoints)
    7. cellStyleFont.FontName = fontName;//字体(仿宋,楷体,宋体 )
    8. cellStyleFont.Color = fontColor;//设置字体颜色(short fontColor = HSSFColor.Black.Index)
    9. cellStyleFont.IsItalic =true;//是否将文字变为斜体(true是,false否)
    10. cellStyleFont.Underline = underlineStyle;//字体下划线(下划线样式(无下划线[None],单下划线[Single],双下划线[Double],会计用单下划线[SingleAccounting],会计用双下划线[DoubleAccounting]))
    11. cellStyleFont.TypeOffset = typeOffset;//字体上标下标(字体上标下标(普通默认值[None],上标[Sub],下标[Super]),即字体在单元格内的上下偏移量)
    12. cellStyleFont.IsStrikeout =true;//是否显示删除线(true显示,false不显示)

    五、NPOI HSSFColor 颜色索引对照表:

    说明:通过对相关属性的介绍,我们可以清楚的知道无论是字体颜色,表格边框颜色,还是单元格背景颜色我们都需要用到HSSFColor对象中的颜色属性索引(该索引的字符类型为short类型)。

    HSSFColor颜色索引对照表如下表所示:

    表格来源:https://www.cnblogs.com/Brainpan/p/5804167.html  (潘小博1992)

    颜色Class名称(注意由于NPOI的版本原因,我们在使用对应Class名称时首字母可能需要小写)short
     Black8
     Brown60
     Olive_Green59
     Dark_Green58
     Dark_Teal56
     Dark_Blue18
     Indigo62
     Grey_80_PERCENT63
     Dark_Red16
     Orange53
     DARK_YELLOW19
     Green17
     Teal21
     Blue12
     Blue_Grey54
     Grey_50_PERCENT23
     Red10
     LIGHT_ORANGE52
     LIME50
     SEA_GREEN57
     AQUA49
     LIGHT_BLUE48
     VIOLET20
     GREY_40_PERCENT55
     Pink14
     Gold51
     Yellow13
     BRIGHT_GREEN11
     TURQUOISE15
     SKY_BLUE40
     Plum61
     GREY_25_PERCENT22
     Rose45
     Tan47
     LIGHT_YELLOW43
     LIGHT_GREEN42
     LIGHT_TURQUOISE41
     PALE_BLUE44
     LAVENDER46
     White9
     CORNFLOWER_BLUE24
     LEMON_CHIFFON26
     MAROON25
     ORCHID28
     CORAL29
     ROYAL_BLUE30
     LIGHT_CORNFLOWER_BLUE31
     AUTOMATIC64

     六、关于NPOI对Excel中的行列常用操作方法概述:

    创建Excel工作表,给工作表赋一个名称(Excel底部名称):

    var sheet = workbook.CreateSheet("人才培训课程表");
    

     创建Excel中指定的行:

    1. ///
    2. /// TODO:先创建行,然后在创建对应的列
    3. /// 创建Excel中指定的行
    4. ///
    5. /// Excel工作表对象
    6. /// 创建第几行(从0开始)
    7. /// 行高
    8. public HSSFRow CreateRow(ISheet sheet, int rowNum, float rowHeight)
    9. {
    10. HSSFRow row = (HSSFRow)sheet.CreateRow(rowNum); //创建行
    11. row.HeightInPoints = rowHeight; //设置列头行高
    12. return row;
    13. }

    创建行内指定的单元格:

    1. ///
    2. /// 创建行内指定的单元格
    3. ///
    4. /// 需要创建单元格的行
    5. /// 单元格样式
    6. /// 创建第几个单元格(从0开始)
    7. /// 给单元格赋值
    8. ///
    9. public HSSFCell CreateCells(HSSFRow row, HSSFCellStyle cellStyle, int cellNum, string cellValue)
    10. {
    11. HSSFCell cell = (HSSFCell)row.CreateCell(cellNum); //创建单元格
    12. cell.CellStyle = cellStyle; //将样式绑定到单元格
    13. if (!string.IsNullOrWhiteSpace(cellValue))
    14. {
    15. //单元格赋值
    16. cell.SetCellValue(cellValue);
    17. }
    18. return cell;
    19. }

    指定合并的行列:  

    1. //TODO:关于Excel行列单元格合并问题(注意:合并单元格后,只需对第一个位置赋值即可)
    2. /**
    3. 第一个参数:从第几行开始合并
    4. 第二个参数:到第几行结束合并
    5. 第三个参数:从第几列开始合并
    6. 第四个参数:到第几列结束合并
    7. **/
    8. CellRangeAddress region = new CellRangeAddress(0, 0, 0, 5);
    9. sheet.AddMergedRegion(region);
    10. cell.SetCellValue("人才培训课程表");//TODO:顶部标题

    设置单元格的列宽:

    sheet.SetColumnWidth(单元格索引,1000);//设置对应列宽(单元格索引从0开始,后面接宽度) 
     

    七、NPOI生成Excel文档完整代码:

    NPOI之Excel数据导出帮助类(创建Excel表格行列,设置行高,设置字体样式,单元格边框样式,单元格背景颜色和样式,单元格内容对齐方式等常用属性和样式封装):

    1. /**
    2. * Author:追逐时光
    3. * Description:Npoi之Excel数据导出帮助类(创建Excel表格行列,设置行高,设置字体样式,单元格边框样式,单元格背景颜色和样式,单元格内容对齐方式等常用属性和样式封装)
    4. * Description:2020年3月29日
    5. */
    6. using NPOI.HSSF.UserModel;
    7. using NPOI.SS.UserModel;
    8. using NPOI.HSSF.Util;
    9. namespace YY_Utility
    10. {
    11. public class NpoiExcelExportHelper
    12. {
    13. private static NpoiExcelExportHelper _exportHelper;
    14. public static NpoiExcelExportHelper _
    15. {
    16. get => _exportHelper ?? (_exportHelper = new NpoiExcelExportHelper());
    17. set => _exportHelper = value;
    18. }
    19. ///
    20. /// TODO:先创建行,然后在创建对应的列
    21. /// 创建Excel中指定的行
    22. ///
    23. /// Excel工作表对象
    24. /// 创建第几行(从0开始)
    25. /// 行高
    26. public HSSFRow CreateRow(ISheet sheet, int rowNum, float rowHeight)
    27. {
    28. HSSFRow row = (HSSFRow)sheet.CreateRow(rowNum); //创建行
    29. row.HeightInPoints = rowHeight; //设置列头行高
    30. return row;
    31. }
    32. ///
    33. /// 创建行内指定的单元格
    34. ///
    35. /// 需要创建单元格的行
    36. /// 单元格样式
    37. /// 创建第几个单元格(从0开始)
    38. /// 给单元格赋值
    39. ///
    40. public HSSFCell CreateCells(HSSFRow row, HSSFCellStyle cellStyle, int cellNum, string cellValue)
    41. {
    42. HSSFCell cell = (HSSFCell)row.CreateCell(cellNum); //创建单元格
    43. cell.CellStyle = cellStyle; //将样式绑定到单元格
    44. if (!string.IsNullOrWhiteSpace(cellValue))
    45. {
    46. //单元格赋值
    47. cell.SetCellValue(cellValue);
    48. }
    49. return cell;
    50. }
    51. ///
    52. /// 行内单元格常用样式设置
    53. ///
    54. /// Excel文件对象
    55. /// 水平布局方式
    56. /// 垂直布局方式
    57. /// 字体大小
    58. /// 是否需要边框
    59. /// 字体加粗 (None = 0,Normal = 400,Bold = 700
    60. /// 字体(仿宋,楷体,宋体,微软雅黑...与Excel主题字体相对应)
    61. /// 是否增加边框颜色
    62. /// 是否将文字变为斜体
    63. /// 是否自动换行
    64. /// 是否增加单元格背景颜色
    65. /// 填充图案样式(FineDots 细点,SolidForeground立体前景,isAddFillPattern=true时存在)
    66. /// 单元格背景颜色(当isAddCellBackground=true时存在)
    67. /// 字体颜色
    68. /// 下划线样式(无下划线[None],单下划线[Single],双下划线[Double],会计用单下划线[SingleAccounting],会计用双下划线[DoubleAccounting])
    69. /// 字体上标下标(普通默认值[None],上标[Sub],下标[Super]),即字体在单元格内的上下偏移量
    70. /// 是否显示删除线
    71. ///
    72. public HSSFCellStyle CreateStyle(HSSFWorkbook workbook, HorizontalAlignment hAlignment, VerticalAlignment vAlignment, short fontHeightInPoints, bool isAddBorder, short boldWeight, string fontName = "宋体", bool isAddBorderColor = true, bool isItalic = false, bool isLineFeed = false, bool isAddCellBackground = false, FillPattern fillPattern = FillPattern.NoFill, short cellBackgroundColor = HSSFColor.Yellow.Index, short fontColor = HSSFColor.Black.Index, FontUnderlineType underlineStyle =
    73. FontUnderlineType.None, FontSuperScript typeOffset = FontSuperScript.None, bool isStrikeout = false)
    74. {
    75. HSSFCellStyle cellStyle = (HSSFCellStyle)workbook.CreateCellStyle(); //创建列头单元格实例样式
    76. cellStyle.Alignment = hAlignment; //水平居中
    77. cellStyle.VerticalAlignment = vAlignment; //垂直居中
    78. cellStyle.WrapText = isLineFeed;//自动换行
    79. //背景颜色,边框颜色,字体颜色都是使用 HSSFColor属性中的对应调色板索引,关于 HSSFColor 颜色索引对照表,详情参考:https://www.cnblogs.com/Brainpan/p/5804167.html
    80. //TODO:引用了NPOI后可通过ICellStyle 接口的 FillForegroundColor 属性实现 Excel 单元格的背景色设置,FillPattern 为单元格背景色的填充样式
    81. //TODO:十分注意,要设置单元格背景色必须是FillForegroundColor和FillPattern两个属性同时设置,否则是不会显示背景颜色
    82. if (isAddCellBackground)
    83. {
    84. cellStyle.FillForegroundColor = cellBackgroundColor;//单元格背景颜色
    85. cellStyle.FillPattern = fillPattern;//填充图案样式(FineDots 细点,SolidForeground立体前景)
    86. }
    87. //是否增加边框
    88. if (isAddBorder)
    89. {
    90. //常用的边框样式 None(没有),Thin(细边框,瘦的),Medium(中等),Dashed(虚线),Dotted(星罗棋布的),Thick(厚的),Double(双倍),Hair(头发)[上右下左顺序设置]
    91. cellStyle.BorderBottom = BorderStyle.Thin;
    92. cellStyle.BorderRight = BorderStyle.Thin;
    93. cellStyle.BorderTop = BorderStyle.Thin;
    94. cellStyle.BorderLeft = BorderStyle.Thin;
    95. }
    96. //是否设置边框颜色
    97. if (isAddBorderColor)
    98. {
    99. //边框颜色[上右下左顺序设置]
    100. cellStyle.TopBorderColor = HSSFColor.DarkGreen.Index;//DarkGreen(黑绿色)
    101. cellStyle.RightBorderColor = HSSFColor.DarkGreen.Index;
    102. cellStyle.BottomBorderColor = HSSFColor.DarkGreen.Index;
    103. cellStyle.LeftBorderColor = HSSFColor.DarkGreen.Index;
    104. }
    105. /**
    106. * 设置相关字体样式
    107. */
    108. var cellStyleFont = (HSSFFont)workbook.CreateFont(); //创建字体
    109. //假如字体大小只需要是粗体的话直接使用下面该属性即可
    110. //cellStyleFont.IsBold = true;
    111. cellStyleFont.Boldweight = boldWeight; //字体加粗
    112. cellStyleFont.FontHeightInPoints = fontHeightInPoints; //字体大小
    113. cellStyleFont.FontName = fontName;//字体(仿宋,楷体,宋体 )
    114. cellStyleFont.Color = fontColor;//设置字体颜色
    115. cellStyleFont.IsItalic = isItalic;//是否将文字变为斜体
    116. cellStyleFont.Underline = underlineStyle;//字体下划线
    117. cellStyleFont.TypeOffset = typeOffset;//字体上标下标
    118. cellStyleFont.IsStrikeout = isStrikeout;//是否有删除线
    119. cellStyle.SetFont(cellStyleFont); //将字体绑定到样式
    120. return cellStyle;
    121. }
    122. }
    123. }

    生成并保存指定的Excel文档内容:

    1. using System;
    2. using System.IO;
    3. using Microsoft.AspNetCore.Hosting;
    4. using NPOI.HSSF.UserModel;
    5. using NPOI.HSSF.Util;
    6. using NPOI.SS.UserModel;
    7. using NPOI.SS.Util;
    8. using YY_Utility;
    9. namespace YY_Services
    10. {
    11. ///
    12. /// Excel文档生成并保存操作类
    13. ///
    14. public class NpoiExcelOperationService
    15. {
    16. private static IHostingEnvironment _environment;
    17. public NpoiExcelOperationService(IHostingEnvironment iEnvironment)
    18. {
    19. _environment = iEnvironment;
    20. }
    21. ///
    22. /// Excel数据导出简单示例
    23. ///
    24. /// 导出结果
    25. /// 保存excel文件路径
    26. ///
    27. public bool ExcelDataExport(out string resultMsg, out string excelFilePath)
    28. {
    29. var result = true;
    30. excelFilePath = "";
    31. resultMsg = "successfully";
    32. //Excel导出名称
    33. string excelName = "人才培训课程表";
    34. try
    35. {
    36. //首先创建Excel文件对象
    37. var workbook = new HSSFWorkbook();
    38. //创建工作表,也就是Excel中的sheet,给工作表赋一个名称(Excel底部名称)
    39. var sheet = workbook.CreateSheet("人才培训课程表");
    40. //sheet.DefaultColumnWidth = 20;//默认列宽
    41. sheet.ForceFormulaRecalculation = true;//TODO:是否开始Excel导出后公式仍然有效(非必须)
    42. #region table 表格内容设置
    43. #region 标题样式
    44. //设置顶部大标题样式
    45. var cellStyleFont = NpoiExcelExportHelper._.CreateStyle(workbook, HorizontalAlignment.Center, VerticalAlignment.Center, 20, true, 700, "楷体", true, false, false, true, FillPattern.SolidForeground, HSSFColor.Coral.Index, HSSFColor.White.Index,
    46. FontUnderlineType.None, FontSuperScript.None, false);
    47. //第一行表单
    48. var row = NpoiExcelExportHelper._.CreateRow(sheet, 0, 28);
    49. var cell = row.CreateCell(0);
    50. //合并单元格 例: 第1行到第2行 第3列到第4列围成的矩形区域
    51. //TODO:关于Excel行列单元格合并问题
    52. /**
    53. 第一个参数:从第几行开始合并
    54. 第二个参数:到第几行结束合并
    55. 第三个参数:从第几列开始合并
    56. 第四个参数:到第几列结束合并
    57. **/
    58. CellRangeAddress region = new CellRangeAddress(0, 0, 0, 5);
    59. sheet.AddMergedRegion(region);
    60. cell.SetCellValue("人才培训课程表");//合并单元格后,只需对第一个位置赋值即可(TODO:顶部标题)
    61. cell.CellStyle = cellStyleFont;
    62. //二级标题列样式设置
    63. var headTopStyle = NpoiExcelExportHelper._.CreateStyle(workbook, HorizontalAlignment.Center, VerticalAlignment.Center, 15, true, 700, "楷体", true, false, false, true, FillPattern.SolidForeground, HSSFColor.Grey25Percent.Index, HSSFColor.Black.Index,
    64. FontUnderlineType.None, FontSuperScript.None, false);
    65. //表头名称
    66. var headerName = new[] { "课程类型", "序号", "日期", "课程名称", "内容概要", "讲师简介" };
    67. row = NpoiExcelExportHelper._.CreateRow(sheet, 1, 24);//第二行
    68. for (var i = 0; i < headerName.Length; i++)
    69. {
    70. cell = NpoiExcelExportHelper._.CreateCells(row, headTopStyle, i, headerName[i]);
    71. //设置单元格宽度
    72. if (headerName[i] == "讲师简介" || headerName[i] == "内容概要")
    73. {
    74. sheet.SetColumnWidth(i, 10000);
    75. }
    76. else
    77. {
    78. sheet.SetColumnWidth(i, 5000);
    79. }
    80. }
    81. #endregion
    82. #region 单元格内容信息
    83. //单元格边框样式
    84. var cellStyle = NpoiExcelExportHelper._.CreateStyle(workbook, HorizontalAlignment.Center, VerticalAlignment.Center, 10, true, 400);
    85. //左侧列单元格合并 begin
    86. //TODO:关于Excel行列单元格合并问题(合并单元格后,只需对第一个位置赋值即可)
    87. /**
    88. 第一个参数:从第几行开始合并
    89. 第二个参数:到第几行结束合并
    90. 第三个参数:从第几列开始合并
    91. 第四个参数:到第几列结束合并
    92. **/
    93. CellRangeAddress leftOne = new CellRangeAddress(2, 7, 0, 0);
    94. sheet.AddMergedRegion(leftOne);
    95. CellRangeAddress leftTwo = new CellRangeAddress(8, 11, 0, 0);
    96. sheet.AddMergedRegion(leftTwo);
    97. //左侧列单元格合并 end
    98. var currentDate = DateTime.Now;
    99. string[] curriculumList = new[] { "艺术学", "设计学", "材料学", "美学", "心理学", "中国近代史", "管理人员的情绪修炼", "高效时间管理", "有效的目标管理", "沟通与协调" };
    100. int number = 1;
    101. for (var i = 0; i < 10; i++)
    102. {
    103. row = NpoiExcelExportHelper._.CreateRow(sheet, i + 2, 20); //sheet.CreateRow(i+2);//在上面表头的基础上创建行
    104. switch (number)
    105. {
    106. case 1:
    107. cell = NpoiExcelExportHelper._.CreateCells(row, cellStyle, 0, "公共类课程");
    108. break;
    109. case 7:
    110. cell = NpoiExcelExportHelper._.CreateCells(row, cellStyle, 0, "管理类课程");
    111. break;
    112. }
    113. //创建单元格列公众类课程
    114. cell = NpoiExcelExportHelper._.CreateCells(row, cellStyle, 1, number.ToString());
    115. cell = NpoiExcelExportHelper._.CreateCells(row, cellStyle, 2, currentDate.AddDays(number).ToString("yyyy-MM-dd"));
    116. cell = NpoiExcelExportHelper._.CreateCells(row, cellStyle, 3, curriculumList[i]);
    117. cell = NpoiExcelExportHelper._.CreateCells(row, cellStyle, 4, "提升,充实,拓展自己综合实力");
    118. cell = NpoiExcelExportHelper._.CreateCells(row, cellStyle, 5, "追逐时光_" + number + "号金牌讲师!");
    119. number++;
    120. }
    121. #endregion
    122. #endregion
    123. string folder = DateTime.Now.ToString("yyyyMMdd");
    124. //保存文件到静态资源文件夹中(wwwroot),使用绝对路径
    125. var uploadPath = _environment.WebRootPath + "/UploadFile/" + folder + "/";
    126. //excel保存文件名
    127. string excelFileName = excelName + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
    128. //创建目录文件夹
    129. if (!Directory.Exists(uploadPath))
    130. {
    131. Directory.CreateDirectory(uploadPath);
    132. }
    133. //Excel的路径及名称
    134. string excelPath = uploadPath + excelFileName;
    135. //使用FileStream文件流来写入数据(传入参数为:文件所在路径,对文件的操作方式,对文件内数据的操作)
    136. var fileStream = new FileStream(excelPath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
    137. //向Excel文件对象写入文件流,生成Excel文件
    138. workbook.Write(fileStream);
    139. //关闭文件流
    140. fileStream.Close();
    141. //释放流所占用的资源
    142. fileStream.Dispose();
    143. //excel文件保存的相对路径,提供前端下载
    144. var relativePositioning = "/UploadFile/" + folder + "/" + excelFileName;
    145. excelFilePath = relativePositioning;
    146. }
    147. catch (Exception e)
    148. {
    149. result = false;
    150. resultMsg = e.Message;
    151. }
    152. return result;
    153. }
    154. }
    155. }

    总结:

    学习,工作,生活都一样,很多东西都需要我们自己动手去尝试我们才能真正的品尝到其中的味道,收获不一样的惊喜。本文主要是个人在工作和学习中的一些总结,希望能够帮助有需要的同学,别忘了给我star哟。

    相关实例链接地址:

    GitHub完整实例地址:

    https://github.com/YSGStudyHards/NPOI-ExportWordAndExcel-ImportExcelData

    .NET Core使用NPOI导出复杂,美观的Excel详解:

    https://www.cnblogs.com/Can-daydayup/p/12501400.html

    .NET Core使用NPOI导出复杂Word详解:

    https://www.cnblogs.com/Can-daydayup/p/11588531.html

    .NET Core使用NPOI将Excel中的数据批量导入到MySQL:

    https://www.cnblogs.com/Can-daydayup/p/12593165.html

  • 相关阅读:
    基于java的空巢老人管理系统
    获取两个字符串的最大公共子序列(LCS)
    72. 编辑距离
    01--MySQL数据库概述
    [Web Server]Tomcat调优之SpringBoot内嵌Tomcat源码分析
    Unity Shader - 兰伯特漫反射
    数据结构 - 顺序表
    mupdf 生成dll
    计算机视觉——python在一张图中画多条ROC线
    NVIDIA平台的兼容性表,其中包括nano、agx xavier 、tx兼容的deepstream和cuda等版本信息
  • 原文地址:https://blog.csdn.net/qq_37237487/article/details/136282273