我在向Excel中插入数据时遇到了一些问题。我想使用C#将datagridview中的shwon数据插入到Excel文件中。我的代码没有显示任何错误,但是当我检查我的excel文件时,没有输入数据。谁能帮我 ?我使用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 !");
}
}
答案 0 :(得分:1)
使用文件流打开包时,Save()
方法不会回写您所做的任何更改。它无声地失败了。如果没有,它仍然会失败,因为您的流已使用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();
}
}
}
}