急!C# Excel创建多sheet,求解

qq_32937889 2016-12-27 11:06:41
本人初来乍到:
有个关于Excel 的问题。
需求是:有个点击按钮 就导出Excel 有一个List集合 里面有5个DataTable的数据,每一个DataTable导出一个Sheet (共五个)每个Datatable的数据都是不一样的 最后生成的五个sheet存放在一个Excel里面


求大神解救:
...全文
598 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
EnForGrass 2016-12-27
  • 打赏
  • 举报
回复
NPOI或者Microsoft.Office.Interop.Excel;都可以 https://q.cnblogs.com/q/66992/ 参考http://biancheng.dnbcw.info/net/340695.html
  • 打赏
  • 举报
回复
引用 4 楼 qq_32937889 的回复:
[quote=引用 2 楼 u011981242 的回复:] 把5个datatable放在一个dataSet里,每个datatable占一个sheet,记得datatable要命名,用下面的类导出
		using Microsoft.Office.Interop.Excel;
		
        private void ExportDataSetToExcel(DataSet ds)
        {
            Excel.Application excelApp = new Excel.Application();
            
            Excel.Workbook excelWorkBook = excelApp.Workbooks.Open(@"E:\Org.xlsx");

            foreach (DataTable table in ds.Tables)
            {
                Excel.Worksheet excelWorkSheet = excelWorkBook.Sheets.Add();
                excelWorkSheet.Name = table.TableName;  //sheet名为datatable表名

                for (int i = 1; i < table.Columns.Count + 1; i++)
                {
                    excelWorkSheet.Cells[1, i] = table.Columns[i - 1].ColumnName;
                }

                for (int j = 0; j < table.Rows.Count; j++)
                {
                    for (int k = 0; k < table.Columns.Count; k++)
                    {
                        excelWorkSheet.Cells[j + 2, k + 1] = table.Rows[j].ItemArray[k].ToString();
                    }
                }
				
				//这里可以添加Sheet的格式代码
				
            }

            excelWorkBook.Save();

            excelWorkBook.Close();
            excelApp.Quit();
        }
Excel.Worksheet excelWorkSheet = excelWorkBook.Sheets.Add(); 类型转换有问题 这个要怎么讲Object类型转换成Microsoft.Office..Interop.Excel.WorkSheet类型呀?[/quote]这段代码需要在本地手动建一个名为Org.xlsx的Excel文件 如果想让用户自定义保存地址,可以这样改:
        private void ExportDataSetToExcel(DataSet ds,string savePath)
        {
            Excel.Application excelApp = new Excel.Application();
            Excel.Workbook excelWorkBook = excelApp.Workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);

            foreach (System.Data.DataTable table in ds.Tables)
            {
                Excel.Worksheet excelWorkSheet = excelWorkBook.Sheets.Add();
                excelWorkSheet.Name = table.TableName;  //sheet名为datatable表名
                for (int i = 1; i < table.Columns.Count + 1; i++)
                {
                    excelWorkSheet.Cells[1, i] = table.Columns[i - 1].ColumnName;
                }
                for (int j = 0; j < table.Rows.Count; j++)
                {
                    for (int k = 0; k < table.Columns.Count; k++)
                    {
                        excelWorkSheet.Cells[j + 2, k + 1] = table.Rows[j].ItemArray[k].ToString();
                    }
                }

                //这里可以添加Sheet的格式代码

            }

            excelWorkBook.Saved = true;
            excelWorkBook.SaveCopyAs(savePath);
            excelWorkBook.Close();
            excelApp.Quit();
            MessageBox.Show("导出成功!");
        }
qq_32937889 2016-12-27
  • 打赏
  • 举报
回复
引用 2 楼 u011981242 的回复:
把5个datatable放在一个dataSet里,每个datatable占一个sheet,记得datatable要命名,用下面的类导出
		using Microsoft.Office.Interop.Excel;
		
        private void ExportDataSetToExcel(DataSet ds)
        {
            Excel.Application excelApp = new Excel.Application();
            
            Excel.Workbook excelWorkBook = excelApp.Workbooks.Open(@"E:\Org.xlsx");

            foreach (DataTable table in ds.Tables)
            {
                Excel.Worksheet excelWorkSheet = excelWorkBook.Sheets.Add();
                excelWorkSheet.Name = table.TableName;  //sheet名为datatable表名

                for (int i = 1; i < table.Columns.Count + 1; i++)
                {
                    excelWorkSheet.Cells[1, i] = table.Columns[i - 1].ColumnName;
                }

                for (int j = 0; j < table.Rows.Count; j++)
                {
                    for (int k = 0; k < table.Columns.Count; k++)
                    {
                        excelWorkSheet.Cells[j + 2, k + 1] = table.Rows[j].ItemArray[k].ToString();
                    }
                }
				
				//这里可以添加Sheet的格式代码
				
            }

            excelWorkBook.Save();
            excelWorkBook.Close();
            excelApp.Quit();
        }
Excel.Worksheet excelWorkSheet = excelWorkBook.Sheets.Add(); 类型转换有问题 这个要怎么讲Object类型转换成Microsoft.Office..Interop.Excel.WorkSheet类型呀?
qq_32937889 2016-12-27
  • 打赏
  • 举报
回复
Excel.Worksheet excelWorkSheet = excelWorkBook.Sheets.Add(); 类型转换有问题 这个要怎么讲Object类型转换成Microsoft.Office..Interop.Excel.WorkSheet类型呀?
  • 打赏
  • 举报
回复
把5个datatable放在一个dataSet里,每个datatable占一个sheet,记得datatable要命名,用下面的类导出
		using Microsoft.Office.Interop.Excel;
		
        private void ExportDataSetToExcel(DataSet ds)
        {
            Excel.Application excelApp = new Excel.Application();
            
            Excel.Workbook excelWorkBook = excelApp.Workbooks.Open(@"E:\Org.xlsx");

            foreach (DataTable table in ds.Tables)
            {
                Excel.Worksheet excelWorkSheet = excelWorkBook.Sheets.Add();
                excelWorkSheet.Name = table.TableName;  //sheet名为datatable表名

                for (int i = 1; i < table.Columns.Count + 1; i++)
                {
                    excelWorkSheet.Cells[1, i] = table.Columns[i - 1].ColumnName;
                }

                for (int j = 0; j < table.Rows.Count; j++)
                {
                    for (int k = 0; k < table.Columns.Count; k++)
                    {
                        excelWorkSheet.Cells[j + 2, k + 1] = table.Rows[j].ItemArray[k].ToString();
                    }
                }
				
				//这里可以添加Sheet的格式代码
				
            }

            excelWorkBook.Save();
            excelWorkBook.Close();
            excelApp.Quit();
        }

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧