简体   繁体   中英

Failed to Insert Data from Datagridview to Excel using EPPlus C#

I have some problem in inserting data to Excel. I want to insert data that is shwon in datagridview into Excel file using C#. My code didn't show any error but when I checked my excel file, there is no data inputted to there. Can anyone help me ? I use 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 !");
            }

        }

When you open the Package with a filestream the Save() method will not write back any changes you made. It fails silently. If it didn't it would still have failed because your stream was opened with FileAccess.Read which prevents changes to the underlying file.

To rectify these issues and to make sure stuff gets cleaned up nicely adapt your code as follows:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM