【问题标题】:Appending Memorystream to existing Memorystream将 Memorystream 附加到现有的 Memorystream
【发布时间】:2019-04-01 10:09:53
【问题描述】:

我无法将 MemoryStream 中的数据附加到其他 MemoryStream 已创建完整数据。 我这样做是为了从两个不同的来源创建一个 Excel。

首先我创建父内存流:

MemoryStream obj_stream = new MemoryStream(100000000);
var tempFile = System.IO.Path.Combine(System.IO.Path.GetTempPath(), Guid.NewGuid() + ".xls");
obj_stream.Write(File.ReadAllBytes(tempFile), 0, File.ReadAllBytes(tempFile).Length);
File.Delete(tempFile);

然后我从compositeLink.ExportToXls 创建子内存流

compositeLink.CreatePageForEachLink();
compositeLink.PrintingSystemBase.XlSheetCreated += PrintingSystemBase_XlSheetCreated;

using (MemoryStream stream = new MemoryStream(100000000))
{
    compositeLink.ExportToXls(stream, new XlsExportOptions() { ExportMode = XlsExportMode.SingleFilePageByPage });
    obj_stream.Write(stream.ToArray(), 0, stream.ToArray().Length);
}

最后我将流写入 Page.Response

if (Page == null || Page.Response == null)
    return;
string disposition = saveAsFile ? "attachment" : "inline";
Page.Response.Clear();
Page.Response.Buffer = false;
Page.Response.AppendHeader("Content-Type", string.Format("application/{0}", fileFormat));
Page.Response.AppendHeader("Content-Transfer-Encoding", "binary");
Page.Response.AppendHeader("Content-Disposition", string.Format("{0}; filename={1}.{2}", disposition, fileName, fileFormat));
Page.Response.BinaryWrite(obj_stream.ToArray());
Page.Response.End();

我认为发生的事情是其中一个或另一个被另一个覆盖,这取决于我执行“nameOfTheStream”.write() 的哪一个

【问题讨论】:

  • 您不能通过将两个 .xls 文件连接在一起来组合两个电子表格。
  • 您必须考虑文件头等。如果您尝试连接两个 xls 文件,请考虑使用前两个文件的值填充第三个(新)xls 文件。
  • 如何将多个excel文件合并为一个:stackoverflow.com/questions/27285615/…

标签: c#


【解决方案1】:

第二次写obj_stream,不要再从0索引开始写(在Write方法的第二个参数中指定)。里面已经有一些数据了。

obj_stream.Write(stream.ToArray(), obj_stream.ToArray().Length, stream.ToArray().Length);

方法详情here

【讨论】:

    猜你喜欢
    • 2012-09-02
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多