将数据填充到已有的EXECL模板中

摘要:
导出execl网上一大堆,最近遇到将数据导出到已有的execl模板中,具体到某行列,动态加载数据。

导出execl网上一大堆,最近遇到将数据导出到已有的execl模板中,具体到某行列,动态加载数据。

添加Microsoft.Office.Interop.Excel 引用

1 /// <summary>
2         ///DataGridView 导出到execl模板中
3         /// </summary>
4         /// <param name="fileName">execl模板路径</param>
5         /// <param name="dgv">数据源</param>
6         /// <param name="index">多种模板情况下 通过判断不同的模板 不需要可删</param>
7         /// <param name="C_AGENCYNAME">exec文件名  不需要可删</param>
8         /// <returns></returns>
9         public string mainaa(string fileName, DataGridView dgv, int index, stringC_AGENCYNAME)
10 {
11 
12             //string fileName = @"d:/模板文件.xls";
13             string savePath = "";
14             Microsoft.Office.Interop.Excel.Application app = null;
15             Microsoft.Office.Interop.Excel.Workbooks wbs = null;
16             Microsoft.Office.Interop.Excel.Workbook wb = null;
17             Microsoft.Office.Interop.Excel.Worksheet s = null;
18 
19             //用与计算不同模板的合计
20             float countsg = 0;
21             float countsh = 0;
22             float countzh = 0;
23             float countfw = 0;
24             float countws = 0;
25             try
26 {
27                 app = newMicrosoft.Office.Interop.Excel.Application();
28                 app.DisplayAlerts = false;
29                 wbs =app.Workbooks;
30                //读取模板
31                 wb =wbs.Open(fileName, Type.Missing, Type.Missing, Type.Missing,
32 Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,
33 Type.Missing, Type.Missing, Type.Missing, Type.Missing,
34 Type.Missing, Type.Missing, Type.Missing);
35                 s = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[1];
36 Microsoft.Office.Interop.Excel.Range rangeMonth;
37                 //假设用模板1 中是从第18行开始写,写入6列   
38                 if (index == 1)
39 {
40                     //从第1行开始
41                     rangeMonth = s.get_Range("A1");
42                     //设置7,8,9,17行 四行将要写如的数据
43                     rangeMonth.Cells[7, 1] = "主题:" + C_AGENCYNAME + "手续费确认函";
44                     rangeMonth.Cells[8, 1] = "统计日期:" + DateTime.Now.Year.ToString() + "" + DateTime.Now.Month.ToString() + "";
45                     rangeMonth.Cells[9, 1] = C_AGENCYNAME + ":";
46                     rangeMonth.Cells[17, 2] =C_AGENCYNAME;
47                     //设置模板1 之后的表格数据 从第19行开始写
48                     rangeMonth = s.get_Range("A19");
49 
50 }
51                 else if (index == 2)
52 {
53                     rangeMonth = s.get_Range("A3");
54 }
55                 else
56 {
57                     rangeMonth = s.get_Range("A1");
58                     rangeMonth.Cells[6, 1] = "收件人:" +C_AGENCYNAME;
59                     rangeMonth.Cells[11, 1] = "主题:" + C_AGENCYNAME + "信诚基金尾随佣金确认函";
60                     rangeMonth.Cells[13, 1] = C_AGENCYNAME + ":";
61                     rangeMonth = s.get_Range("A19");
62 
63 }
64               
65                 System.Windows.Forms.Clipboard.SetDataObject(dgv.Columns[0].HeaderText);
66               
67                 //生成字段名称   
68                 int row = 0;
69                 for (int i = 0; i < dgv.ColumnCount; i++)
70 {
71                     rangeMonth.Cells[1 , i + 1 + row] =dgv.Columns[i].HeaderText;
72                     if(index==3)
73 {
74                         row += 2;
75 }
76 }
77                 //填充数据   
78                 for (int i = 0; i < dgv.RowCount - 1; i++)
79                 {//控制行
80                     
81                     //基金手续费 合计 累加
82                     if (index == 1)
83 {
84                         countsg += float.Parse(dgv[2, i].Value.ToString());
85                         countsh += float.Parse(dgv[3, i].Value.ToString());
86                         countzh += float.Parse(dgv[4, i].Value.ToString());
87                         countfw += float.Parse(dgv[5, i].Value.ToString());
88 }
89                     for (int j = 0; j < dgv.ColumnCount; j++)//控制列
90 {
91                      
92                         if (dgv[j, i].ValueType == typeof(string))
93 {
94                             rangeMonth.Cells[i + 2, j + 1] = "'" +dgv[j, i].Value.ToString();
95 }
96                         else
97 {
98 
99                            int rows = 0;
100                             if(index==3)
101 {
102                                 rows = 2;
103 }
104                             rangeMonth.Cells[i + 2, j + 1 + rows] =dgv[j, i].Value.ToString();
105                            
106 }
107                         //count += float.Parse(dgv[4, j + 1].Value.ToString());
108                      
109 }
110                     if (index == 3)
111 {
112                         countws += float.Parse(dgv[1, i].Value.ToString());
113 }
114 }
115                 rangeMonth.Cells[dgv.RowCount + 1, 1] = "合计";
116                 if (index == 1)//基金手续费合计
117 {
118                     rangeMonth.Cells[dgv.RowCount + 1, 3] =countsg.ToString();
119                     rangeMonth.Cells[dgv.RowCount + 1, 4] =countsh.ToString();
120                     rangeMonth.Cells[dgv.RowCount + 1, 5] =countzh.ToString();
121                     rangeMonth.Cells[dgv.RowCount + 1, 6] =countfw.ToString();
122                     rangeMonth.EntireColumn.AutoFit(); //自动调整列宽
123                     rangeMonth.EntireRow.AutoFit(); //自动设置行高
124 }
125                 if (index == 3)
126 {
127                     rangeMonth.Cells[dgv.RowCount + 1,4] =countws.ToString();
128                     rangeMonth.Cells[dgv.RowCount +2, 4] = "公司";
129                     rangeMonth.Cells[dgv.RowCount +3, 4] = DateTime.Now.Year.ToString()+""+DateTime.Now.Month.ToString()+""+DateTime.Now.Day.ToString()+"";
130 }
131                 //循环最后一列添加背景颜色
132 
133                 introwNum;
134                 if (index == 3)
135 {
136                      rowNum = 4;
137 }
138                 else
139 {
140                     rowNum =dgv.ColumnCount;
141 }
142                 for (int i = 1; i <= rowNum; i++)
143 {
144                     rangeMonth.Cells[dgv.RowCount + 1, i].Interior.Color = Color.FromArgb(220, 230, 241);
145                     rangeMonth.Cells[dgv.RowCount + 1, i].RowHeight = 20.25;
146                     rangeMonth.Cells[dgv.RowCount + 1, i].Font.Name = "宋体";//设置字体   
147                     rangeMonth.Cells[dgv.RowCount + 1, i].Font.Size = 16;//字体大小   
148                     rangeMonth.Cells[dgv.RowCount + 1, i].Font.Bold = true;//加粗显示   
149 }
150                 s.Paste(rangeMonth, false);
151 
152 
153 }
154             catch(Exception ex)
155 {
156 
157                 throwex;
158 }
159             finally
160 {
161                 try
162 {
163 
164                     //E:CodeFEEFEEExeclAndPdfExecl手续费模板.xlsx
165                     int num =fileName.Length;
166                     string[] execlnamestr = fileName.Split('\');
167                     string ExeclName = DateTime.Now.Year.ToString() + "" +DateTime.Now.Month.ToString()
168                         + "" + C_AGENCYNAME + execlnamestr[execlnamestr.Length - 1];
169                     //获取路径
170                     string s1 =System.AppDomain.CurrentDomain.BaseDirectory;
171                     string q = s1.Substring(0, s1.Length - 15);
172                     //设置存放execl 的路径
173                     savePath = System.IO.Path.Combine(q, "ExeclAndPdf\SaveExecl\" +ExeclName).ToString();
174 wb.SaveAs(savePath);
175                     if (wb != null)
176                         wb.Close(true, Type.Missing, false);
177                     if (wbs != null)
178 wbs.Close();
179                     if (app != null)
180 app.Quit();
181                     wb = null;
182                     wbs = null;
183                     app = null;
184 }
185                 catch
186 {
187 }
188 
189 GC.Collect();
190                 #region 强行杀死最近打开的Excel进程
191                 System.Diagnostics.Process[] excelProc = System.Diagnostics.Process.GetProcessesByName("EXCEL");
192                 System.DateTime startTime = newDateTime();
193                 int m, killID = 0;
194                 for (m = 0; m < excelProc.Length; m++)
195 {
196                     if (startTime <excelProc[m].StartTime)
197 {
198                         startTime =excelProc[m].StartTime;
199                         killID =m;
200 }
201 }
202                 if (excelProc[killID].HasExited == false)
203 {
204 excelProc[killID].Kill();
205 }
206                 #endregion
207 }
208             returnsavePath;
209         }

免责声明:文章转载自《将数据填充到已有的EXECL模板中》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇setTimeout、Promise、Async/Await 的区别uniapp历史模式history配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用EasyExcel导出图片及异常处理

1、使用String类型导出   定义自己的Converter,不使用默认的StringImageConverter 如果图片路径为空或者图片路径是错误的,返回相应的内容 import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream;...

Java:将数据库数据导出到Excel (一眼就看会)

所用Jar包 1. sqljdbc4.jar 连接数据库的Jar包(根据数据库的不同进行选择,我用的SqlServer2008) 2.Jxl.jar 访问Excel的Jar包 注意:支持以.xls结尾的Excel文件,可能不支持.xlsx结尾的 实现效果: 数据库数据: 导出的Excel: 完整代码: 导出的核心代码就四五行 类里需要import的包也...

Excel中,从字符串中截取指定字符

情况一:提取字符串中的数字 目标:提取C列的全部数字 方法一:Excel中的FIND函数+MID函数   方法:想要从指定位置截取,用到MID函数。因为right和left函数都是从第一个字符或者最后一个字符开始截取,不适合。     MID语法:MID(字符串,截取开始位置,返回字符的个数)     因为截取的开始位置不统一,但是要截取的数字前面都有#...

使用C#和Excel进行报表开发-生成统计图Chart

    原文地址:http://www.opent.cn/a/094/1235.shtml     有的Web项目选用Excel作为报表方案,在服务器端生成Excel文件,然后传送到客户端,由客户端进行打印。在国内的环境下,相对PDF方式,Excel的安装率应该比pdf阅读器的安装率要高,同时,微软也为C#操作Excel提供了完备的接口,虽然ZedGrap...

python读写excel

Python操作excel表,需要用到两个库:xlrd和xlwt 1、获取excel表Book对象实例:   book = xlrd.open_workbook(filepath) 2、获取excel的Sheet对象   sheet_nums = book.nsheets    获取Sheet对象个数   sheet = book.sheet_by_ind...

SQL Server数据导出Excel

https://www.cnblogs.com/D-jing/p/11558041.html 一、将查询到的数据导出为Excel 1、找到要导出的表 2、新建查询(可以查询所有,也可查询所需要的数据) 3、我们在查询结果的空白处右键单击,选择“将结果另存为”选项 4、这时候会弹出保存界面,默认文件类型为.CSV (PS:CSV是一种通用的、相对...