相关文章推荐
文质彬彬的四季豆  ·  FOR JSON 如何将 SQL ...·  2 月前    · 
焦虑的单车  ·  代码世界的试验田和游乐场:在线开发环境对比与 ...·  9 月前    · 
还单身的上铺  ·  MYSQL数据库之数据完整性约束 - ...·  12 月前    · 
玩篮球的火锅  ·  如何在PySparkDataFrame中进行 ...·  1 年前    · 
爱旅游的木瓜  ·  使用数据整理器探索和转换 Spark ...·  1 年前    · 
Code  ›  在NPOI workbook.write之后,MemoryStream似乎关闭了?开发者社区
https://cloud.tencent.com/developer/ask/sof/122479
爱健身的鼠标垫
1 年前
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
提问

问 在NPOI workbook.write之后,MemoryStream似乎关闭了?

Stack Overflow用户
提问于 2014-04-08 16:28:54
EN

我在一个ASP.NET Web API项目中使用 NPOI 将DataTable转换为Excel。

但我从回复中什么也没得到。下面是我的代码:

代码语言: javascript
复制
public HttpResponseMessage GetExcelFromDataTable(DataTable dt)
    IWorkbook workbook = new XSSFWorkbook(); // create *.xlsx file, use HSSFWorkbook() for creating *.xls file.
    ISheet sheet1 = workbook.CreateSheet();
    IRow row1 = sheet1.CreateRow(0);
    for (int i = 0; dt.Columns.Count > i; i++)
        row1.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName);
    for (int i = 0; dt.Rows.Count > i; i++)
        IRow row = sheet1.CreateRow(i + 1);
        for (int j = 0; dt.Columns.Count > j; j++)
            row.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString());
    MemoryStream ms = new MemoryStream();
    workbook.Write(ms);
    HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
    result.Content = new StreamContent(ms);
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
    result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
    result.Content.Headers.ContentDisposition.FileName = string.Format("{0}.xlsx", dt.TableName);
    return result;
}

我设置了一个断点来检查 workbook.Write(ms) 之后的 ms.Length ,但它返回了一个异常: System.ObjectDisposedException 。

我哪里错了?

3 19.5K 0 票数 33
EN
c#
excel
asp.net-web-api
npoi

回答 3

Stack Overflow用户

发布于 2019-03-27 22:03:50

我不知道这是不是还需要,但是有一个 overload

代码语言: javascript
复制
Write(Stream stream, bool leaveOpen)

其中,如果设置了 leaveOpen = true ,则会使MemoryStream保持打开状态

票数 12
EN

Stack Overflow用户

发布于 2016-04-13 06:03:05

正如 alun 上面所说的,在 this 问题中,你可以将流提供给另一个MemoryStream:

代码语言: javascript
复制
...
MemoryStream ms = new MemoryStream();
using(MemoryStream tempStream = new MemoryStream)
    workbook.Write(tempStream);
    var byteArray = tempStream.ToArray();
    ms.Write(byteArray, 0, byteArray.Length);
    HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
 
推荐文章
文质彬彬的四季豆  ·  FOR JSON 如何将 SQL Server 数据类型转换为 JSON 数据类型 - SQL Server | Microsoft Learn
2 月前
焦虑的单车  ·  代码世界的试验田和游乐场:在线开发环境对比与推荐 | 少数派会员 π+Prime
9 月前
还单身的上铺  ·  MYSQL数据库之数据完整性约束 - 搬家小蜜蜂 - 博客园
12 月前
玩篮球的火锅  ·  如何在PySparkDataFrame中进行模糊搜索?
1 年前
爱旅游的木瓜  ·  使用数据整理器探索和转换 Spark 数据(预览版) - Microsoft Fabric | Microsoft Learn
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号