C# 导出excel按指定模板

原创 2015年11月20日 17:09:13
 private bool ExportForExecl(object sender, DoWorkEventArgs e)
        {
            Microsoft.Office.Interop.Excel.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
            Microsoft.Office.Interop.Excel.Workbook workbook = excel.Workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet); //生成一个workbook对象
            Microsoft.Office.Interop.Excel.Worksheet sheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得第一个 sheet
            Object Nothing = System.Reflection.Missing.Value;


            //公共属性
            int rowHeight = 15;
            int columnWidth = 2;
            int fontSize = 12;
            Color color = Color.FromArgb(218, 150, 148);
            int beginIndex = 3;//开始行
            try
            {
                foreach (System.Data.DataTable dt in dts)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        Range range = null;// 创建一个空的单元格对象
                        DataRow dr = dt.Rows[i];
                        string tableName = dr["表名"].ToString();
                        string tableMemo = dr["表说明"].ToString();
                        string sheetName = tableMemo.IsNotNullAndEmpty() ? tableMemo : tableName;
                        if (sheetName.IsNotNullAndEmpty())
                        {
                            //sheet名是否有重复,有重复就在名字后面加序数
                            if (sheetNames.Keys.Contains(sheetName))
                            {
                                int m = sheetNames[sheetName] + 1;
                                sheetName = sheetName + m.ToString();
                                sheetNames.Add(sheetName, m);
                            }
                            else
                            {
                                sheetNames.Add(sheetName, 1);
                            }
                            //第一个sheet不需要追加
                            if (i != 0)
                            {
                                sheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add(Nothing, sheet, Nothing, Nothing);
                            }
                            beginIndex = 3;
                            sheet.Name = sheetName;
                            #region 首行
                            #region 第一行
                            //公共属性
                            range = sheet.get_Range("C" + beginIndex, "BI" + beginIndex);// 获取多个单元格
                            range.Columns.AutoFit();            // 设置列宽为自动适应
                            range.Borders.LineStyle = 1;    // 设置单元格边框
                            range.HorizontalAlignment = XlHAlign.xlHAlignCenter;// 设置单元格水平居中
                            range.VerticalAlignment = XlVAlign.xlVAlignCenter;// 设置单元格垂直居中
                            range.RowHeight = rowHeight;           // 设置行高
                            range.ColumnWidth = columnWidth;         // 设置列宽
                            range.Cells.Borders.LineStyle = 1;//设置全边框
                            range.Font.Size = fontSize;           // 设置字体大小

                            //表名列
                            range = sheet.get_Range("C" + beginIndex, "F" + beginIndex);// 获取多个单元格
                            range.Merge(Missing.Value);         // 合并单元格
                            range.Value2 = "表名";
                            range.Interior.Color = color;  // 设置单元格背景色
                            #endregion

                            #region 第二行
                            beginIndex++;
                            //公共属性
                            range = sheet.get_Range("C" + beginIndex, "BI" + beginIndex);// 获取多个单元格
                            range.Columns.AutoFit();            // 设置列宽为自动适应
                            range.Borders.LineStyle = 1;    // 设置单元格边框
                            range.HorizontalAlignment = XlHAlign.xlHAlignCenter;// 设置单元格水平居中
                            range.VerticalAlignment = XlVAlign.xlVAlignCenter;// 设置单元格垂直居中
                            range.RowHeight = rowHeight;           // 设置行高
                            range.ColumnWidth = columnWidth;         // 设置列宽
                            range.Cells.Borders.LineStyle = 1;//设置全边框
                            range.Font.Size = fontSize;           // 设置字体大小
                            range.Interior.Color = color;  // 设置单元格背景色

                            //NO
                            range = sheet.get_Range("C" + beginIndex, "D" + beginIndex);// 获取多个单元格
                            range.Merge(Missing.Value);   // 合并单元格
                            range.Value2 = "NO";

                            //列名
                            range = sheet.get_Range("E" + beginIndex, "N" + beginIndex);
                            range.Merge(Missing.Value);
                            range.Value2 = "列名";

                            //数据类型
                            range = sheet.get_Range("O" + beginIndex, "U" + beginIndex);
                            range.Merge(Missing.Value);
                            range.Value2 = "数据类型";
                            #endregion
                            #endregion
                        }

                        #region 数据行
                        beginIndex++;
                        //公共属性
                        range = sheet.get_Range("C" + beginIndex, "BI" + beginIndex);// 获取多个单元格
                        range.Columns.AutoFit();            // 设置列宽为自动适应
                        range.Borders.LineStyle = 1;    // 设置单元格边框
                        range.HorizontalAlignment = XlHAlign.xlHAlignCenter;// 设置单元格水平居中
                        range.VerticalAlignment = XlVAlign.xlVAlignCenter;// 设置单元格垂直居中
                        range.RowHeight = rowHeight;           // 设置行高
                        range.ColumnWidth = columnWidth;         // 设置列宽
                        range.Cells.Borders.LineStyle = 1;//设置全边框
                        range.Font.Size = fontSize;           // 设置字体大小


                        //NO
                        range = sheet.get_Range("C" + beginIndex, "D" + beginIndex);// 获取多个单元格
                        range.Merge(Missing.Value);      // 合并单元格
                        range.Value2 = dr["字段序号"];


                        //列名
                        range = sheet.get_Range("E" + beginIndex, "N" + beginIndex);
                        range.Merge(Missing.Value);
                        range.Value2 = dr["字段名"];

                        #endregion


                        //sheet.get_Range(sheet.Cells[29, 2], sheet.Cells[29, 2]).Orientation = Microsoft.Office.Interop.Excel.XlOrientation.xlVertical;//设置29行第2个单元格的字体竖直居中在单元格内
                        //range = sheet.get_Range("A1", Missing.Value);// 获取单个单元格
                        //range.Font.Bold = true;         // 加粗字体       
                        // 如需打印文件
                        //sheet.PrintOut(Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                   }
                }
                excel.ActiveWorkbook.SaveAs(_ToPath, Nothing, Nothing, Nothing, Nothing, Nothing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Nothing, Nothing, Nothing, Nothing, Nothing);
                excel.ActiveWorkbook.Close(Nothing, Nothing, Nothing);   //关闭Excel Work Book对象
                excel.Quit();  //关闭Excel组件对象
                GC.Collect();
                MessageBox.Show("生成成功!");
                System.Diagnostics.Process.Start(_ToPath);//自动打开excel
               // this.Close();//关闭程序
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                this.button3.Enabled = true;
                return false;
            }
            return true;
        }

根据excel模版导出数据到excel

添加dll: 调用方式: [html] view plaincopyprint? int num = Convert.ToInt32(this...
  • lcczzu
  • lcczzu
  • 2015年07月14日 16:45
  • 813

基于Excel模板导出——ExcelTemplate

ExcelTemplate项目是一个基于Excel模板,依靠配置文件描述导出过程的Excel导出工具。 它提供了大量适用于各种场景的常用配置(导出规则),同时提供一些供外部使用的扩展接口,以满足一些...

c# 导出excel 通过模板

private void Bind() { //模板文件 string TempletFileName = Server.MapPath("template.x...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

C#Winform实现高效率导入和导出Excel文件

/// /// 导出Excel文件 /// /// /// /// 数据集 /// 导出后是否打开文件 ...
  • pp_fzp
  • pp_fzp
  • 2016年05月25日 22:07
  • 5748

C# 实现Excel导出 加载模板 导入数据到模板

前些天公司做了个项目,遇到要导出数据到Excel,并要求有格式,不用客户在去排版。本来用水晶报表之类的插件,做这个比较好,公司不愿掏钱,只好自己写程序去实现。 关于格式的控制有两种方案:一、填充数据时...

c#导出数据至excel模板中,可分页

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R...

C# 导出数据到Excel模板中

今天做报表的时候遇到了多表头的问题,而且相应的报表的格式都一样。所以就采用了报表模板的方式来进行。 第一步:在开发的当前项目中引入:Microsoft.Office.Interop.Excel;Sy...
  • yhyhyhy
  • yhyhyhy
  • 2016年01月27日 12:26
  • 233

C# 根据模板 导出 Excel 图表 (NPOI组件)

C# 根据模板 导出  Excel  图表 (NPOI组件) 我的数据是放在List中的。     //导出         protected void onclickbutton(object s...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# 导出excel按指定模板
举报原因:
原因补充:

(最多只允许输入30个字)