• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

两个datagridview控件怎么同时导出数据到excel,自己做的只能导出一个

天涯背包客 2021-07-23 15:05:01

private void Excel_Click(object sender, EventArgs e)
        {
            string fileName = "";
            string saveFileName = "";
            SaveFileDialog saveDialog = new SaveFileDialog();
            saveDialog.DefaultExt = "xlsx";     //保存为.xlsx  即Excel文件
            saveDialog.Filter = "Excel文件|*.xlsx";
            saveDialog.FileName = fileName;
            saveDialog.ShowDialog();
            saveFileName = saveDialog.FileName;
            if (saveFileName.IndexOf(":") < 0) return; //被点了取消
            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
            if (xlApp == null)
            {
                MessageBox.Show("无法创建Excel对象,您的电脑可能未安装Excel");
                return;
            }
            Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
            Microsoft.Office.Interop.Excel.Workbook workbook =
            workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
            Microsoft.Office.Interop.Excel.Worksheet worksheet =
            (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1         
            string[,] datas = new string[dataGridView1.Rows.Count + 1, dataGridView1.ColumnCount];                                                                 //写入标题             
            //进度条
            进度条 fm = new 进度条(0, dataGridView1.ColumnCount);
            fm.Show(this);                                                  //tempProgressBar.Step=1; 
            for (int i = 0; i < dataGridView1.ColumnCount; i++)
            {
                worksheet.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;
                datas[0, i] = dataGridView1.Columns[i].HeaderText;
            }
            //写入数值
            for (int r = 0; r < dataGridView1.Rows.Count; r++)
            {

                for (int i = 0; i < dataGridView1.ColumnCount; i++)
                {
                    object obj = dataGridView1.Rows[r].Cells[i].Value;
                    worksheet.Cells[r + 2, i + 1] = dataGridView1.Rows[r].Cells[i].Value;
                    datas[r + 1, i] = obj == null ? "" : obj.ToString().Trim();
                }
                System.Windows.Forms.Application.DoEvents();
                fm.setPos(r);
            }
            fm.Close();//关闭窗体
            Microsoft.Office.Interop.Excel.Range fchR = worksheet.Range[worksheet.Cells[1, 1], worksheet.Cells[dataGridView1.Rows.Count + 1, dataGridView1.ColumnCount]];
            fchR.Value2 = datas;
            worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
            MessageBox.Show(fileName + "资料保存成功", "提示", MessageBoxButtons.OK);
            if (saveFileName != "")
            {
                try
                {
                    workbook.Saved = true;
                    workbook.SaveCopyAs(saveFileName);  //fileSaved = true;                 
                }
                catch (Exception ex)
                {//fileSaved = false;                      
                    MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
                }
            }
            xlApp.Quit();
            GC.Collect();//强行销毁         
        }

...全文
183 点赞 收藏 1
写回复
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
古耕 07-23

img
Sheet是Excel的页签,就像这样
img
你可以为每个dgv都创建一个页签就可以同时导出了

另外两个dgv的字段都一样的话,可以循环完表1再循环表2呀,还有追加列的方式,这里就不多说了

回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2021-07-23 15:05
社区公告

让您成为最强悍的C#开发者