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

时间:2016-12-24 08:58:24

标签: c# excel datagridview

我在向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 !");
            }

        }

1 个答案:

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