保存为使用EPPlus?

Pom*_*ter 19 c# epplus

有没有人知道如何使用package.Saveas函数?

package.SaveAs(tempFolderPathAlt + saveas + ".xlsx");
Run Code Online (Sandbox Code Playgroud)

此时以红色下划线标出以下错误:

'OfficeOpenXml.ExcelPackage.SaveAs(System.IO.Stream)'的最佳重载方法匹配有一些无效的参数

目前我正在以下列方式保存文件.

FileStream aFile = new FileStream(tempFolderPathAlt + saveas + ".xls",    FileMode.Create);
byte[] byData = package.GetAsByteArray();
aFile.Seek(0, SeekOrigin.Begin);
aFile.Write(byData, 0, byData.Length);
aFile.Close();
Run Code Online (Sandbox Code Playgroud)

但是这种方式包仍然是开放的,我不能使用它使用的文件.

save as将正确关闭包,但它不接受我的文件路径.


编辑

我试过这个:

using (FileStream aFile = new FileStream(tempFolderPathAlt + saveas + ".xlsx", FileMode.Create))
{
    byte[] byData = package.GetAsByteArray();
    aFile.Seek(0, SeekOrigin.Begin);
    package.SaveAs(aFile);
    //aFile.Write(byData, 0, byData.Length);
    aFile.Close();
}
Run Code Online (Sandbox Code Playgroud)

但是得到以下错误?

包对象已关闭并处理,因此无法对此对象或此包的一部分上打开的任何流执行操作.

Han*_*Han 30

该软件包将被关闭和调用任何的功能配置后 GetAsByteArray,Save,SaveAs.这就是你得到消息的原因

包对象已关闭并处理,因此无法对此对象或此包的一部分上打开的任何流执行操作.

解决方案是在保存后调用Load函数继续处理excel文件.或者如果你只想获得ByteArray和FileOutput,我相信你们两个都是一样的.

将文件保存到磁盘后,您可以读取数据:

string path = @"C:\test1.xlsx";
Stream stream = File.Create(path);
package.SaveAs(stream);
stream.Close();

byte[] data = File.ReadAllBytes(path);
Run Code Online (Sandbox Code Playgroud)

或者,您可以在获取ByteArray后将数据保存到磁盘:

byte[] data = package.GetAsByteArray();

string path = @"C:\test1.xlsx";
File.WriteAllBytes(path, data);
Run Code Online (Sandbox Code Playgroud)


Max*_*mus 9

我来寻找答案,但现有的答案对我来说并不清楚.以下是我使用EPPlus所做的事情System.Windows.Forms:

ExcelPackage xlPackage = new ExcelPackage(xlsTmpFileName)

// Populate the Excel spreadsheet here.

SaveFileDialog sfd = new SaveFileDialog();
using (FileStream fs = new FileStream(sfd.FileName, FileMode.Create))
{
    xlPackage.SaveAs(fs);
}
Run Code Online (Sandbox Code Playgroud)