使用EPPlus C#无法将数据从Datagridview插入Excel

将数据插入Excel中有一些问题。 我想使用C#将datagridview中的shwon数据插入到Excel文件中。 我的代码没有显示任何错误,但是当我检查我的Excel文件,没有数据input到那里。 谁能帮我 ? 我使用EPPlus

string lokasifile = @"D:\\Data Pengisian SLA Surabaya\\" + new System.Globalization.CultureInfo("id-ID").DateTimeFormat.GetDayName(DateTime.Now.DayOfWeek) + "_" + System.DateTime.Now.Date.ToString("dd MMM yyyy", new System.Globalization.CultureInfo("id-ID")) + ".xlsx"; 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) { ExcelPackage pck = new ExcelPackage(); FileStream stream = new FileStream(lokasifile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); pck.Load(stream); var rekap = pck.Workbook.Worksheets["Rekap"]; OleDbConnection kon = new OleDbConnection(konekpengisian2); OleDbCommand command = kon.CreateCommand(); OleDbCommand command1 = kon.CreateCommand(); OleDbCommand command2 = kon.CreateCommand(); OleDbCommand command3 = kon.CreateCommand(); kon.Open(); int tima = 0; int timb = 0; int timc = 0; int timd = 0; int time = 0; foreach (DataGridViewRow row in JadwalisiGV.Rows) { if (!row.IsNewRow) { if (row.Cells["Tim"].Value.ToString() == "A") { tima++; rekap.Cells[tima + 7, 3].Value = row.Cells["WSID"].Value; rekap.Cells[tima + 7, 4].Value = row.Cells["Limit"].Value + ",000,000"; IsiTimABox.Text = tima.ToString(); } if (row.Cells["Tim"].Value.ToString() == "B") { timb++; rekap.Cells[timb + 7, 9].Value = row.Cells["WSID"].Value; rekap.Cells[timb + 7, 10].Value = row.Cells["Limit"].Value + ",000,000"; IsiTimBBox.Text = timb.ToString(); } if (row.Cells["Tim"].Value.ToString() == "C") { timc++; rekap.Cells[timc + 28, 3].Value = row.Cells["WSID"].Value; rekap.Cells[timc + 28, 4].Value = row.Cells["Limit"].Value + ",000,000"; IsiTimCBox.Text = timc.ToString(); } if (row.Cells["Tim"].Value.ToString() == "D") { timd++; rekap.Cells[timd + 28, 9].Value = row.Cells["WSID"].Value; rekap.Cells[timd + 28, 10].Value = row.Cells["Limit"].Value + ",000,000"; IsiTimDBox.Text = timd.ToString(); } if (row.Cells["Tim"].Value.ToString() == "E") { time++; rekap.Cells[time + 7, 15].Value = row.Cells["WSID"].Value; rekap.Cells[time + 7, 16].Value = row.Cells["Limit"].Value + ",000,000"; IsiTimEBox.Text = time.ToString(); } TotalMesinBox.Text = (tima + timb + timc + timd + time).ToString(); } } kon.Close(); } } else { MessageBox.Show("Silakan isi PIC terlebih dahulu !"); } } 

当你用文件stream打开包时, Save()方法不会回写你所做的任何更改。 它默默地失败。 如果没有,它将仍然失败,因为您的stream是用FileAccess.Read打开的,它阻止了对底层文件的更改。

为了纠正这些问题,并确保清理的东西很好地适应你的代码如下:

 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) { // create an FileInfo instance var file = new FileInfo(lokasifile); // use the contructor that take an FileInfo // wrap in a using so stuff gets disposed nicely using (ExcelPackage pck = new ExcelPackage(file)) { var rekap = pck.Workbook.Worksheets[1]; // the rest of your code here // the rest of your code is above // explicitely Save the changes pck.Save(); } } } }