繁体   English   中英

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

[英]Failed to Insert Data from Datagridview to Excel using EPPlus C#

将数据插入Excel时遇到一些问题。 我想使用C#将datagridview中显示的数据插入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 !");
            }

        }

当您使用文件流打开包时, 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();
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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