我想把3个Datagridview数据表导出到一个Excel中,分不同Sheet,有办法吗?

时间:2022-12-11 14:45:13
3个Datagridview 数据列数不一样,我的目的就是想把它放到一个excel文件里,分不同的Sheet保存

6 个解决方案

#1


点击一个按钮就可以导出

#2


1.Ado.net
2.商业控件 Apose之类的
3.保存成Excel XML格式的,手动把一个Excel保存成XML,然后查看这个文件就行了

#3


引用 2 楼 assky124 的回复:
1.Ado.net
2.商业控件 Apose之类的
3.保存成Excel XML格式的,手动把一个Excel保存成XML,然后查看这个文件就行了


求详细步骤分享

#4


有人知道吗?  我在网上引用了一段代码,我不知道怎么把我的三个datagridview放到这里面
 /// <summary>  
        ///  多个dataGirdView导出到同一个excel的多个sheet当中  
        /// </summary>  
        /// <param name="myDics">一个装载多个datagirdview的集合</param>  
        public static void setMoreExcelSheet(Dictionary<string, DataGridView> myDics)  
        {  
            string fileName = "";  
            Microsoft.Office.Interop.Excel.Application excel = null;  
             //选择创建文件的路径  
            SaveFileDialog save = new SaveFileDialog();  
            save.Filter = "excel files(*.xls)|*.xls";  
            save.Title = @"C:\AutoTestTool";  
            save.FileName = "all_" + DateTime.Now.ToString("yyyyMMddHHmmss");  
            if (save.ShowDialog() == DialogResult.OK)  
            {  
                fileName = save.FileName;  
                //MessageBox.Show(save.FileName);  
                // 创建Excel对象  
                excel = new Microsoft.Office.Interop.Excel.Application();  
                if (excel == null)  
                {  
                    MessageBox.Show("Excel无法启动", "提示");  
                    return;  
                }  
            }  
            else  
            {  
                return;  
            }  
            Microsoft.Office.Interop.Excel.Workbook excelBook = null;  
            Microsoft.Office.Interop.Excel.Worksheet excelSheet = null;  
            
            //创建Excel工作薄  
            excelBook = excel.Workbooks.Add(true);  
             foreach (KeyValuePair<string, DataGridView> kvp in myDics)  
            {  
                DataGridView dataGridView = kvp.Value;  
                string name = kvp.Key;  
                 
                Console.WriteLine("Key = {0}, Value = {1}", name, dataGridView);  
  
  
                 
                //总可见列数,总可见行数  
                int colCount = dataGridView.Columns.GetColumnCount(DataGridViewElementStates.Visible);  
                int rowCount = dataGridView.Rows.GetRowCount(DataGridViewElementStates.Visible);  
                //dataGridView 没有数据提示  
                if (dataGridView.Rows.Count == 0 || rowCount == 0)  
                {  
                    MessageBox.Show("表中没有数据", "提示");  
                }  
                else  
                {  
                    if (null == excelSheet)  
                    {  
                        excelSheet = (Microsoft.Office.Interop.Excel.Worksheet)excelBook.Worksheets[1];  
                        excelSheet.Name = name;  
                     
                    }  
                    else  
                    {  
                        //expression.Add(Before, After, Count, Type)  
                        //expression     :    必需。该表达式返回上面的对象之一。  
                        //Before    :    Variant 类型,可选。指定工作表对象,新建的工作表将置于此工作表之前。  
                        //After    :    Variant 类型,可选。指定工作表对象,新建的工作表将置于此工作表之后。  
                        //Count    :    Variant 类型,可选。要新建的工作表的数目。默认值为 1。  
                       //Type    :    Variant 类型,可选。指定工作表类型。  
                        excelSheet = (Microsoft.Office.Interop.Excel.Worksheet)excelBook.Worksheets.Add(Type.Missing,  
                            excelSheet, 1, Type.Missing);  
                        excelSheet.Name = name;  
                    }  
                                       
                    //生成字段名称  
                    int k = 0;  
                    for (int i = 0; i < dataGridView.ColumnCount; i++)  
                    {  
                        if (dataGridView.Columns[i].Visible)  //不导出隐藏的列  
                        {  
                            excel.Cells[1, k + 1] = dataGridView.Columns[i].HeaderText;  
                            k++;  
                        }  
                    }  
                    //填充数据  
                    for (int i = 0; i < dataGridView.RowCount; i++)  
                    {  
                        k = 0;  
                        for (int j = 0; j < dataGridView.ColumnCount; j++)  
                        {  
                            if (dataGridView.Columns[j].Visible)  //不导出隐藏的列  
                            {  
                                if (dataGridView[j, i].ValueType == typeof(string))  
                                {  
                                    excel.Cells[i + 2, k + 1] = "" + dataGridView[j, i].Value.ToString();  
                                }  
                                else  
                                {  
                                    excel.Cells[i + 2, k + 1] = dataGridView[j, i].Value.ToString();  
                                }  
                            }  
                            k++;  
                        }  
                    }   
                }  
            }  
  
  
             try  
             {  
                 excelBook.Saved = true;  
                 excelBook.SaveCopyAs(fileName);  
  
  
                 excelBook.Close(true);  
                 excel.Quit();  
                 releaseObject(excelSheet);  
                 releaseObject(excelBook);  
                 releaseObject(excel);  
             }  
             catch  
             {  
                 MessageBox.Show("导出失败,文件可能正在使用中", "提示");  
             }  
  
  
        }  
  
  

#5


给你简单的说一下吧
我想把3个Datagridview数据表导出到一个Excel中,分不同Sheet,有办法吗?
这个是我自己写的可以导出多个表的,看下面的sheet就知道了
我想把3个Datagridview数据表导出到一个Excel中,分不同Sheet,有办法吗?
看这张图 首先你有几个数据就加几个sheet,
然后循环添加到sheet中就可以了

#6


Quote: 引用 5 楼 liuzhe147 的回复:

我想把3个Datagridview数据表导出到一个Excel中,分不同Sheet,有办法吗?

#1


点击一个按钮就可以导出

#2


1.Ado.net
2.商业控件 Apose之类的
3.保存成Excel XML格式的,手动把一个Excel保存成XML,然后查看这个文件就行了

#3


引用 2 楼 assky124 的回复:
1.Ado.net
2.商业控件 Apose之类的
3.保存成Excel XML格式的,手动把一个Excel保存成XML,然后查看这个文件就行了


求详细步骤分享

#4


有人知道吗?  我在网上引用了一段代码,我不知道怎么把我的三个datagridview放到这里面
 /// <summary>  
        ///  多个dataGirdView导出到同一个excel的多个sheet当中  
        /// </summary>  
        /// <param name="myDics">一个装载多个datagirdview的集合</param>  
        public static void setMoreExcelSheet(Dictionary<string, DataGridView> myDics)  
        {  
            string fileName = "";  
            Microsoft.Office.Interop.Excel.Application excel = null;  
             //选择创建文件的路径  
            SaveFileDialog save = new SaveFileDialog();  
            save.Filter = "excel files(*.xls)|*.xls";  
            save.Title = @"C:\AutoTestTool";  
            save.FileName = "all_" + DateTime.Now.ToString("yyyyMMddHHmmss");  
            if (save.ShowDialog() == DialogResult.OK)  
            {  
                fileName = save.FileName;  
                //MessageBox.Show(save.FileName);  
                // 创建Excel对象  
                excel = new Microsoft.Office.Interop.Excel.Application();  
                if (excel == null)  
                {  
                    MessageBox.Show("Excel无法启动", "提示");  
                    return;  
                }  
            }  
            else  
            {  
                return;  
            }  
            Microsoft.Office.Interop.Excel.Workbook excelBook = null;  
            Microsoft.Office.Interop.Excel.Worksheet excelSheet = null;  
            
            //创建Excel工作薄  
            excelBook = excel.Workbooks.Add(true);  
             foreach (KeyValuePair<string, DataGridView> kvp in myDics)  
            {  
                DataGridView dataGridView = kvp.Value;  
                string name = kvp.Key;  
                 
                Console.WriteLine("Key = {0}, Value = {1}", name, dataGridView);  
  
  
                 
                //总可见列数,总可见行数  
                int colCount = dataGridView.Columns.GetColumnCount(DataGridViewElementStates.Visible);  
                int rowCount = dataGridView.Rows.GetRowCount(DataGridViewElementStates.Visible);  
                //dataGridView 没有数据提示  
                if (dataGridView.Rows.Count == 0 || rowCount == 0)  
                {  
                    MessageBox.Show("表中没有数据", "提示");  
                }  
                else  
                {  
                    if (null == excelSheet)  
                    {  
                        excelSheet = (Microsoft.Office.Interop.Excel.Worksheet)excelBook.Worksheets[1];  
                        excelSheet.Name = name;  
                     
                    }  
                    else  
                    {  
                        //expression.Add(Before, After, Count, Type)  
                        //expression     :    必需。该表达式返回上面的对象之一。  
                        //Before    :    Variant 类型,可选。指定工作表对象,新建的工作表将置于此工作表之前。  
                        //After    :    Variant 类型,可选。指定工作表对象,新建的工作表将置于此工作表之后。  
                        //Count    :    Variant 类型,可选。要新建的工作表的数目。默认值为 1。  
                       //Type    :    Variant 类型,可选。指定工作表类型。  
                        excelSheet = (Microsoft.Office.Interop.Excel.Worksheet)excelBook.Worksheets.Add(Type.Missing,  
                            excelSheet, 1, Type.Missing);  
                        excelSheet.Name = name;  
                    }  
                                       
                    //生成字段名称  
                    int k = 0;  
                    for (int i = 0; i < dataGridView.ColumnCount; i++)  
                    {  
                        if (dataGridView.Columns[i].Visible)  //不导出隐藏的列  
                        {  
                            excel.Cells[1, k + 1] = dataGridView.Columns[i].HeaderText;  
                            k++;  
                        }  
                    }  
                    //填充数据  
                    for (int i = 0; i < dataGridView.RowCount; i++)  
                    {  
                        k = 0;  
                        for (int j = 0; j < dataGridView.ColumnCount; j++)  
                        {  
                            if (dataGridView.Columns[j].Visible)  //不导出隐藏的列  
                            {  
                                if (dataGridView[j, i].ValueType == typeof(string))  
                                {  
                                    excel.Cells[i + 2, k + 1] = "" + dataGridView[j, i].Value.ToString();  
                                }  
                                else  
                                {  
                                    excel.Cells[i + 2, k + 1] = dataGridView[j, i].Value.ToString();  
                                }  
                            }  
                            k++;  
                        }  
                    }   
                }  
            }  
  
  
             try  
             {  
                 excelBook.Saved = true;  
                 excelBook.SaveCopyAs(fileName);  
  
  
                 excelBook.Close(true);  
                 excel.Quit();  
                 releaseObject(excelSheet);  
                 releaseObject(excelBook);  
                 releaseObject(excel);  
             }  
             catch  
             {  
                 MessageBox.Show("导出失败,文件可能正在使用中", "提示");  
             }  
  
  
        }  
  
  

#5


给你简单的说一下吧
我想把3个Datagridview数据表导出到一个Excel中,分不同Sheet,有办法吗?
这个是我自己写的可以导出多个表的,看下面的sheet就知道了
我想把3个Datagridview数据表导出到一个Excel中,分不同Sheet,有办法吗?
看这张图 首先你有几个数据就加几个sheet,
然后循环添加到sheet中就可以了

#6


Quote: 引用 5 楼 liuzhe147 的回复:

我想把3个Datagridview数据表导出到一个Excel中,分不同Sheet,有办法吗?