NPOI生产.xlsx文件件时,在使用book.Write(ms);后,会关闭流,这样导致再次使用Respons输出流的时候就出错了。 我看到一些网友提供的解决办法是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public class NPOIMemoryStream : MemoryStream { /// <summary> /// 获取流是否关闭 /// </summary> public bool IsColse { get; private set; } public NPOIMemoryStream(bool colse = false) { IsColse = colse; } public override void Close() { if (IsColse) { base.Close(); } } } |
使用自定义流代替内存流,这样就可以保证流不会被自定关闭了 from:https://www.cnblogs.com/caoyc/p/6215210.html
View Details原本使用 IWorkbook 中的HSSFWorkbook,代表 xls文件,最大导出行为65536,当数据量过大时,使用XSSFWorkbook,代表Xlsx文件,提供更多的行与列,在使用XSSFWorkbook写入MemoryStream时,提示Cannot access a closed Stream,是因为在使用book.Write(ms);后,会关闭流; 百度过后,使用自定义流代替内存流,这样就可以保证流不会被自定关闭了 解决方案可参考https://www.cnblogs.com/caoyc/p/6215210.html文章 ———————————————— 版权声明:本文为CSDN博主「SupperDuan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/dpq980522/article/details/129643588
View Details
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
XSSFWorkbook workbook = new XSSFWorkbook(); //创建工作簿 XSSFSheet sheet = (XSSFSheet)workbook.CreateSheet("test"); //创建表单 XSSFRow headerRow = (XSSFRow)sheet.CreateRow(); //创建row headerRow.CreateCell().SetCellValue(); headerRow.CreateCell().SetCellValue(); using (MemoryStream ms = new MemoryStream()) { workbook.Write(ms); ms.Flush(); //Response.Write(ms); Response.BinaryWrite(ms.ToArray()); Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); Response.AppendHeader("content-disposition", "attachment;filename=" + HttpUtility.UrlEncode("test", System.Text.Encoding.UTF8) + ".xlsx"); Response.End(); } |
from:https://www.bbsmax.com/A/xl56OW01dr/
View Details1、在控制器获取要导出的数据 2、通过注入 IWebHostEnvironment 服务对象来获取根目录的物理路径
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public FileResult ToExcel() { //导出数据 DataTable dt = new DataTable("Table"); //获取路径 var strPath = Path.Combine(_webhostenvironment.ContentRootPath, AppConfigurtaion.Configuration["AppSettings:upload"]); string name = DateTime.Now.ToString("yyyyMMdd") + ".xls"; byte[] data = null; using (MemoryStream ms = ComFun.Export_ToExcel(dt, strPath, colname)) { data = ms.GetBuffer(); } return File(data, "application/vnd.ms-excel", name); } |
3、引用using NPOI.SS.UserModel;using NPOI.HSSF.UserModel; 4、获取导出excel所需模板 5、创建HSSWorkbook的对象用来调用NPOI文件,如果你导入的数据时没有调用ICellStyle类的对象设置的样式话,那么出来的数据在Excel是不加任何的样式。也就是说数据过多的话,数据会挤在一排,而且超出会隐藏。所以要设置ICellStyle的属性才行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
public static MemoryStream Export_ToExcel(DataTable dt, string strpath, string[] colname) { //获取导出模板 string fileName = System.IO.Path.GetDirectoryName(strpath) + @"\resource\Excel.xls"; FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate); HSSFWorkbook hssfworkbook = new HSSFWorkbook(fs); ISheet sheet = hssfworkbook.GetSheetAt(0); ICellStyle cellStyle = hssfworkbook.CreateCellStyle(); IRow row = sheet.CreateRow(0); for (int i = 0; i < colname.Length; i++) { string name = colname[i]; ICell cell = row.CreateCell(i); //在第一行中创建单元格 cell.CellStyle = cellStyle;//单元格添加样式 cell.SetCellValue(name);//循环往第二行的单元格中添加数据 } if (dt != null && dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { IRow rows = sheet.CreateRow(i + 1); for (int j = 0; j < colname.Length; j++) { string name = colname[j]; string columnval = dt.Rows[i][name].ToString(); ICell cell = rows.CreateCell(j); //在第二行中创建单元格 cell.CellStyle = cellStyle;//单元格添加样式 cell.SetCellValue(columnval);//循环往第二行的单元格中添加数据 } } } MemoryStream file = new MemoryStream(); hssfworkbook.Write(file); return file; } |
———————————————— 版权声明:本文为CSDN博主「归-途」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/w1824575989/article/details/125059544
View Details前阵子做题遇到了大数的精确计算,再次认识了bigdecimal 关于Bigdecimal意外的有许多小知识点和坑,这里特此整理一下为方便以后学习,希望能帮助到其他的萌新 BigDecimal的运算——加减乘除 首先是bigdecimal的初始化 这里对比了两种形式,第一种直接value写数字的值,第二种用string来表示
View DetailsEnvoy的核心工作内容在于对业务透明的请求拦截,将所有进出流量进行管理。对拦截的请求进行一定的规则进行安全访问控制、接入控制、流量控制等诸多方面处理后,发送给应用程序。
View Details环境:Windows, Linux发布.net 6 API 发起接口请求报错:Request body too large. The max request body size is 30000000 bytes. 解决方式,Startup.cs添加如下代码:
1 2 3 4 5 |
//接口请求限制 services.Configure<KestrelServerOptions>(options => { options.Limits.MaxRequestBodySize = int.MaxValue; }); |
下面是github的issue,基本上可以解决大部分请求遇到的大小限制问题,可根据自己需要添加相关代码: https://github.com/dotnet/aspnetcore/issues/20369 from:https://blog.csdn.net/The_Moon_/article/details/127996098
View Detailsapplication.properties
1 2 3 4 5 6 |
spring.servlet.multipart.enabled=true spring.servlet.multipart.max-file-size=100MB spring.servlet.multipart.max-request-size=100MB spring.servlet.multipart.file-size-threshold=0 spring.servlet.multipart.location=/usr/local/project/file spring.servlet.multipart.resolve-lazily=false |
application.yml
1 2 3 4 5 6 7 8 |
spring.servlet: multipart: enabled: true location: /usr/local/project/file max-file-size: 100MB max-request-size: 100MB file-size-threshold: 0 resolve-lazily: false |
from:https://blog.csdn.net/qq_44730827/article/details/115719202
View Details最常见的初始化 List 方法为:
1 2 3 4 5 |
List<String> languages = new ArrayList<>(); languages.add("Java"); languages.add("PHP"); languages.add("Python"); System.out.println(languages); |
但是实际上,我们并不会直接使用 new ArrayList 来初始化 List。 你可以使用 Guava 的 newArrayList 来直接初始化。 List<String> languages = Lists.newArrayList(); 上面 2 种方法初始化的 List 是可变的,因此你可以对初始化成功的 List 进行添加和删除。 Arrays 使用这个方法初始化的 List 是不可变的。 考虑使用下面的代码来初始化一个 List。 List<Integer> list1 = Arrays.asList(1,2); Arrays 是 JDK 的一个类,你可以使用这个类来初始化一个 List。 考察下面的代码:
1 2 |
List<Integer> list1 = Arrays.asList(1,2); list1.add(3); |
将会给你一个:java.lang.UnsupportedOperationException 异常。 这是一个运行时错误,不是编译错误。 因此你在编译的时候是不会提示的。 List 使用这个方法初始化的 List 是不可变的。 考虑使用下面的代码来初始化一个 List。 List<Integer> list = List.of(1,2); List 是 JDK 的一个类,你可以使用这个类来初始化一个 List。 考察下面的代码:
1 2 |
List<Integer> list1 = List.of(1,2); list1.add(3); |
将会给你一个:java.lang.UnsupportedOperationException 异常。 将不可变 List 变成可变 如果 List 是不可变的。 我们可以使用 new ArrayList<> 来包装下就可以了 考察下面的代码:
1 2 |
List<Integer>list2 = new ArrayList<>(Arrays.asList(1,2)); list2.add(3); |
如果使用上面的代码的话,你创建的 List 就可以是可变的了,可以对创建的 List 进行修改和删除。 Java 初始化 List 的几种方法 – Java […]
View Details