Ich möchte Arbeitsmappe erstellen und dann Daten mit EPPlus schreiben. Wenn ich eine neue Arbeitsmappe erstelle, kann sie erfolgreich erstellt werden. Aber wenn ich einige Daten zu diesem Arbeitsblatt schreiben will, es scheiterte und Fehler sagtEPPlus Dispose funktioniert nicht
Der Prozess kann nicht die Datei ‚Dateinamen‘ zugreifen kann, weil es seine von einem anderen Prozess verwendet wird.
Ich habe vorherige ExcelPackage entfernt, aber der Fehler immer noch angezeigt, wenn ich Daten schreibe.
//Create new Workbook
private void PengisianBaruBW_DoWork(object sender, DoWorkEventArgs e)
{
this.Invoke(new MethodInvoker(delegate
{
SetPengisianBtn.Enabled = false;
}));
FileInfo filePath = new FileInfo("D:\\Data Pengisian SLA Surabaya\\" + day + "_" + date + ".xlsx");
if (File.Exists(filePath.ToString()))
{
File.Delete(filePath.ToString());
}
using (ExcelPackage pck = new ExcelPackage(filePath))
{
var schedule = pck.Workbook.Worksheets.Add("Schedule");
var cart = pck.Workbook.Worksheets.Add("Cartridge");
var unsche = pck.Workbook.Worksheets.Add("Unschedule");
var rekap = pck.Workbook.Worksheets.Add("Rekap");
//My Code here
pck.SaveAs(filePath);
pck.Dispose(); //I have disposed ExcelPakcage here
}
}
//Write Data to Excel File
private void PrintScheduleBtn_Click(object sender, EventArgs e)
{
if (StaffATB.Text != "" && HelperTeamATB.Text != "" && StaffBTB.Text != "" && HelperTeamBTB.Text != "" && StaffCTB.Text != "" && HelperTeamCTB.Text != "" && StaffDTB.Text != "" && HelperTeamDTB.Text != "")
{
DialogResult dialogResult = MessageBox.Show("Apakah Anda yakin ingin menyimpan jadwal pengisian ?", "", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
FileInfo file = new FileInfo("D:\\Data Pengisian SLA Surabaya\\" + day + "_" + date + ".xlsx");
using (ExcelPackage pck = new ExcelPackage(file)) //error here
{
var rekap = pck.Workbook.Worksheets["Rekap"];
var data = pck.Workbook.Worksheets["Data"];
//my code to write data here
pck.SaveAs(file);
pck.Dispose();
}
}
}
else
{
MessageBox.Show("Silakan isi PIC terlebih dahulu !");
}
}
Ich habe diesen Code hinzugefügt zu prüfen, ob meine Excel-Datei aktiv ist oder nicht. Aber der Fehler besteht immer noch. Ich setze einen Haltepunkt und ich sehe, dass der Stromwert null ist, was darauf hinweist, dass meine Excel-Datei in der Nähe ist. Aber warum existiert der Fehler noch? Kann mir jemand helfen ?
string file = "D:\\Data Pengisian SLA Surabaya\\" + day + "_" + date + ".xlsx";
var path = Path.Combine(Path.GetTempPath(), "D:\\Data Pengisian SLA Surabaya\\" + day + "_" + date + ".xlsx");
var tempfile = new FileInfo(path);
FileStream stream = null;
try
{
stream = tempfile.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (IOException)
{
}
finally
{
if (stream != null)
stream.Close();
}
Sind Sie sicher, dass die Erstellung abgeschlossen ist, wenn Sie auf die Schaltfläche Zeitplan drucken klicken? Weil Sie in einem Hintergrundthread erstellen. Sie müssen Dispose nicht aufrufen, wenn Sie die Instanz in eine using-Anweisung eingeschlossen haben. – rene