web-dev-qa-db-ja.com

EPPlusを使用して保存しますか?

Package.Saveas関数の使用方法を知っている人はいますか?

package.SaveAs(tempFolderPathAlt + saveas + ".xlsx");

現時点では、これは次のエラーで赤の下線が引かれています。

「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();

しかし、この方法では、パッケージは開いたままになり、使用したファイルを操作できません。

名前を付けて保存すると、パッケージが適切に閉じられますが、ファイルパスは受け入れられません。


編集

私はこれを試しました:

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();
}

しかし、次のエラーが発生しますか?

パッケージオブジェクトが閉じられて破棄されたため、このオブジェクトまたはこのパッケージの一部で開かれたストリームに対して操作を実行できません。

18
Pomster

私はこれに対する答えを探しに来ましたが、既存の答えは私には明らかではありませんでした。 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);
}
8
Maximus

どのバージョンから先まではわかりませんが、EPPlusのSaveAsメソッドはFileInfoを受け入れます。したがって、次のようなことができます。

using (var app = new ExcelPackage(new FileInfo(inputPath)))
{
    //process
    app.SaveAs(new FileInfo(outputPath));
}

Saveメソッドとは異なり、SaveAsメソッド上書きファイルもファイル名が既に存在する場合。

1
nawfal

SaveAsaFile St​​reamを受け入れます。

このようなことは、関数シグネチャSaveAs(System.IO.Stream)を調べることで自分で確認できます。 Streamを取ります。 stringを渡すとコンパイルできない可能性があるため、何らかの方法で有用なStream(作成した)を作成する必要があります。

0
usr

余剰を取り除くpackage.GetAsByteArrayを呼び出して解決する必要があります。

私はちょうど走った:

using (FileStream aFile = new FileStream(@"C:\Temp\asdf.xlsx", FileMode.Create))
{
    aFile.Seek(0, SeekOrigin.Begin);
    package.SaveAs(aFile);
    aFile.Close();
}

// See here - I can still work with the spread sheet.
var worksheet = package.Workbook.Worksheets.Single(); 
0
LosManos