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();
}
しかし、次のエラーが発生しますか?
パッケージオブジェクトが閉じられて破棄されたため、このオブジェクトまたはこのパッケージの一部で開かれたストリームに対して操作を実行できません。
私はこれに対する答えを探しに来ましたが、既存の答えは私には明らかではありませんでした。 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);
}
どのバージョンから先まではわかりませんが、EPPlusのSaveAs
メソッドはFileInfo
を受け入れます。したがって、次のようなことができます。
using (var app = new ExcelPackage(new FileInfo(inputPath)))
{
//process
app.SaveAs(new FileInfo(outputPath));
}
Save
メソッドとは異なり、SaveAs
メソッド上書きファイルもファイル名が既に存在する場合。
SaveAs
はaFile
Streamを受け入れます。
このようなことは、関数シグネチャSaveAs(System.IO.Stream)
を調べることで自分で確認できます。 Stream
を取ります。 string
を渡すとコンパイルできない可能性があるため、何らかの方法で有用なStream
(作成した)を作成する必要があります。
余剰を取り除く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();