博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

asp.net 导入excel文件

Posted on 2016-09-27 15:46  system_kk  阅读(386)  评论(0编辑  收藏  举报

  

前台页面:

 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="b2ccarriersimport.aspx.cs" Inherits="web.financeimport.b2ccarriersimport" %>
 2 
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4 <html xmlns="http://www.w3.org/1999/xhtml">
 5 <head id="Head1" runat="server">
 6     <title></title>
 7     <link href="/css/default.css" rel="stylesheet" type="text/css" />
 8     <link href="/css/jquery.ui.all.css" rel="stylesheet" type="text/css" />
 9     <script type="text/javascript" src="/js/jquery-1.9.1.js"></script>
10     <script type="text/javascript" src="/js/jquery.ui.core.js"></script>
11     <script type="text/javascript" src="/js/jquery.ui.datepicker.js"></script>
12     <script src="/js/jquery-ui-timepicker-addon.js" type="text/javascript"></script>
13     <script type="text/javascript" src="/js/common.js?r=20140613"></script>
14 </head>
15 <body>
16     <form id="form1" runat="server">
17     <div class="container">
18         <div class="content">
19             <div class="cPanel pbg">
20                 <div class="detailPanel" style="padding: 0">
21                     <table cellpadding="0" cellspacing="0" class="oderAdmin">
22                         <tr>
23                             <td colspan="2">
24                                 B2C航司导入
25                             </td>
26                         </tr>
27                         <tr>
28                             <th>
29                             </th>
30                             <td>
31                                 <asp:FileUpload ID="file" runat="server" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<asp:Button
32                                     ID="btnok" CssClass="button button-primary" runat="server" Text="导入航司报表" OnClick="btnok_Click" />
33                             </td>
34                         </tr>
35                         <tr>
36                             <th>
37                             </th>
38                             <td style="color: Red">
39                                 注意:文件名必须是XXX-XXX-X这样的类型组合【不允许使用其它的相隔符】-(目前可导入账单包括【<span style="color: Green"> SZX348-KY;SZX348-KY-R;SZX348-ZH;SZX348-ZH-R</span>】)
40                             </td>
41                         </tr>
42                         <tr><th></th><td><asp:Label style="color:Red;font-size:xx-large" ID="lbmessage" runat="server" Text="请选择您要导入的航司文件"></asp:Label></td></tr>
43                     </table>
44                 </div><div style="display:none"><asp:Button
45                                     ID="Button1" CssClass="button button-primary" 
46                     runat="server" Text="匹配数据" onclick="Button1_Click" /></div>
47             </div>
48         </div>
49         <div class="clr">
50         </div>
51     </div>
52     </form>
53 </body>
54 </html>
View Code

后台页面:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Web;
  5 using System.Web.UI;
  6 using System.Web.UI.WebControls;
  7 using System.IO;
  8 using System.Data;
  9 using web.code;
 10 using MySql.Data.MySqlClient;
 11 using System.Threading;
 12 using webframework.model;
 13 using webframework.bll;
 14 
 15 namespace web.financeimport
 16 {
 17     public partial class b2ccarriersimport : System.Web.UI.Page
 18     {
 19         private bllFI_repsource_excel bll = new bllFI_repsource_excel();
 20         private static DataTable dt = new DataTable();
 21         private static string FI_Aircode = "";
 22         private static string FI_Office = "";
 23         private static string EndFlag = "";
 24         protected void Page_Load(object sender, EventArgs e)
 25         {
 26 
 27         }
 28 
 29         protected void btnok_Click(object sender, EventArgs e)
 30         {
 31             if (file.HasFile)
 32             {
 33                 bool fileOK = false;
 34                 if (!string.IsNullOrEmpty(FI_Aircode)) FI_Aircode = "";
 35                 if (!string.IsNullOrEmpty(FI_Office)) FI_Office = "";
 36                 if (!string.IsNullOrEmpty(EndFlag)) EndFlag = "";
 37                 if (dt != null || dt.Rows.Count > 0) dt.Clear();
 38                 String fileExtension = Path.GetExtension(file.FileName).ToLower();
 39                 string qianzhui = Path.GetFileNameWithoutExtension(file.FileName);
 40                 FI_Aircode = qianzhui.Split('-')[1].ToUpper();
 41                 FI_Office = qianzhui.Split('-')[0].ToUpper();
 42                 EndFlag = qianzhui.Split('-').Length == 3 ? qianzhui.Split('-')[2].ToUpper() : "";
 43                 String[] allowedExtensions = { ".xls", ".xlsx", ".csv", ".CSV" };
 44                 for (int i = 0; i < allowedExtensions.Length; i++)
 45                 {
 46                     if (fileExtension == allowedExtensions[i])
 47                     {
 48                         fileOK = true;
 49                     }
 50                 }
 51                 if (fileOK)
 52                 {
 53                     string path = Server.MapPath("~/Temp/");
 54                     if (!System.IO.Directory.Exists(path))
 55                     {
 56                         System.IO.Directory.CreateDirectory(path);
 57                     }
 58                     try
 59                     {
 60                         path = path + file.FileName;
 61                         file.SaveAs(path);
 62                         if (!AnaylerXls(path, fileExtension, FI_Aircode, FI_Office, EndFlag))
 63                         {
 64                             Alert("报表解析失败");
 65                         }
 66                     }
 67                     catch (Exception ex)
 68                     {
 69                         Alert("程序出错:" + ex.TargetSite + "==[" + ex.Message + "]");
 70                     }
 71                 }
 72                 else
 73                 {
 74                     Alert("文件格式错误,只支持xls/xlsx/csv");
 75                 }
 76             }
 77             else
 78             {
 79                 Alert("请选择文件");
 80             }
 81         }
 82 
 83         private bool AnaylerXls(string path, String filetype, string FI_Aircode, string FI_Office, string EndFlag)
 84         {
 85             if (dt == null) dt = new DataTable();
 86             if (filetype.Contains("xlsx"))
 87             {
 88                 #region<<<<
 89                 #endregion
 90             }
 91             else if (filetype.Contains("xls"))
 92             {
 93                 #region<<<
 94                 if (FI_Aircode.Contains("ZH"))
 95                 {
 96                     if (string.IsNullOrEmpty(EndFlag))
 97                         dt = ExcelHelper.GetExcelDataAsTableNPOI(path, "订单号");
 98                     else
 99                         dt = ExcelHelper.GetExcelDataAsTableNPOI(path, "订单编号");
100                 }
101                 if (FI_Aircode.Contains("KY"))
102                 {
103                     if (string.IsNullOrEmpty(EndFlag))
104                         dt = ExcelHelper.GetExcelDataAsTableNPOI(path, "订单号");
105                     else
106                         dt = ExcelHelper.GetExcelDataAsTableNPOI(path, "订单编号");
107                 }
108                 else
109                 {
110 
111                 }
112                 #endregion
113             }
114             else
115             {
116                 #region<<<< .zip svc格式
117                 if (FI_Office.Contains("HFDZC"))
118                 {
119                     //dt = CSVUtil.getCsvDataBy(path, "序号");
120                 }
121                 else
122                 {
123                     //dt = CSVUtil.getCsvDataBy(path, "流水号");
124                 }
125                 #endregion
126             }
127             System.IO.File.Delete(path);
128             if (dt.Rows.Count > 0)
129             {
130                 lbmessage.Text = "正在解析航司数据。。。,请勿关闭页面!";
131                 this.Page.ClientScript.RegisterStartupScript(this.GetType(), "success", "$(\"#Button1\").click();", true);
132             }
133             else
134             {
135                 Alert("您选择的文件报表中没有数据");
136             }
137             return true;
138         }
139 
140         protected void Alert(string str)
141         {
142             lbmessage.Text = str;
143             //this.Page.ClientScript.RegisterStartupScript(this.GetType(), "success", "alert('" + str + "');", true);
144         }
145         private void InsertCarrierR(DataTable dt, string FI_Aircode, string FI_Office, string EndFlag)
146         {
147             DataTable newdt = CreateRepsource();
148             MySql.Data.MySqlClient.MySqlConnection conn = new MySqlConnection(webframework.common.Config.CONMYSQL_172_16_6_4_READ);
149             try
150             {
151                 int connum = 0;
152                 DateTime nowtime = DateTime.Now;
153                 foreach (DataRow dr in dt.Rows)
154                 {
155                     #region<<<数据入库
156                     DataRow newdr = newdt.NewRow();
157                     string tikeno = dr["票号"].ToString();
158                     if (string.IsNullOrEmpty(tikeno))
159                         continue;
160                     newdr["FI_Eticket"] = dr["票号"].ToString().Replace("-", "").Trim();
161 
162                     newdr["FI_Aircode"] = FI_Aircode.Trim();
163                     newdr["FI_Price"] = decimal.Parse(dr["原票金额"].ToString());
164                     newdr["FI_Tax"] = decimal.Parse(dr["原票机场税"].ToString());
165                     newdr["FI_Agenfee"] = 0;
166                     newdr["FI_Rate"] = 0;
167                     newdr["FI_Amount1"] = decimal.Parse(dr["订单支付金额"].ToString());
168                     newdr["FI_Amount2"] = 0M;
169 
170                     newdr["FI_DateIss"] = DateTime.Parse(dr["订单支付日期"].ToString());
171                     newdr["FI_Pnr"] = dr["PNR编号"].ToString().Trim();
172                     newdr["FI_Vendor"] = dr["退票旅行社编号"].ToString().Trim();
173                     newdr["FI_Vnumber"] = dr["退票旅行社名称"].ToString().Trim();
174                     newdr["FI_Orderno"] = dr["订单编号"].ToString().Trim();
175                     newdr["FI_Paybank"] = dr["订单支付银行"].ToString().Trim();
176                     newdr["FI_Bankno"] = dr["原支付平台流水号"].ToString().Replace("'", "").Trim();
177                     newdr["FI_office"] = FI_Office;
178                     newdr["FI_Cpnr"] = "";
179                     newdr["FI_Jobno"] = "";
180                     newdr["FI_Buyno"] = "";
181                     newdr["FI_DataTyp"] = "B2B";
182                     newdr["FI_Flag"] = "22";
183                     newdr["FI_OpMan"] = "F018";
184                     newdr["FI_OpTime"] = DateTime.Now;
185                     string sql = "SELECT o.orderState, o.outDate,j.startCity,j.reachCity,j.takeoffDate,j.seat,j.flightNo,jp.pnr,p.name,p.ptype FROM t_order o LEFT JOIN  t_journey j ON o.id=j.orderId LEFT JOIN t_journeypassenger jp ON j.id=jp.journeyId LEFT JOIN t_passenger p ON jp.passengerId=p.id WHERE  jp.tktNo1='{0}'  ";
186                     DataTable ordt = webframework.common.MySqlHelper.ExecuteDataTable(conn, CommandType.Text,
187                             string.Format(sql, tikeno.Trim()), null);
188                     if (ordt.Rows.Count > 0)
189                     {
190 
191                         newdr["FI_toman"] = ordt.Rows[0]["name"].ToString();
192                         newdr["FI_mantype"] = ordt.Rows[0]["ptype"].ToString() == "1" ? "ADT" : "CHD";
193 
194                         newdr["FI_State"] = GetOrderStateDesc(ordt.Rows[0]["orderState"].ToString());
195                         newdr["FI_Voyage"] = ordt.Rows[0]["startCity"].ToString().Trim() + "-" + ordt.Rows[0]["reachCity"].ToString().Trim();
196                         newdr["FI_Flight"] = ordt.Rows[0]["flightNo"].ToString().Trim();
197                         newdr["FI_Space"] = ordt.Rows[0]["seat"].ToString().Trim();
198                         newdr["FI_Dateto2"] = DateTime.Parse("1900-01-01");
199                         newdr["FI_Dateto1"] = DateTime.Parse(ordt.Rows[0]["takeoffDate"].ToString());
200                     }
201                     newdt.Rows.Add(newdr);
202 
203                     #endregion
204                     if (connum != 0 && connum % 100 == 0)
205                     {
206                         conn.Close();
207                     }
208                     connum++;
209                 }
210                 SqlHelper.BulkCopy("Initial Catalog=LHETWINDB;Data Source=(local);uid=sa;pwd=123", "FI_repsource", newdt, newdt.Rows.Count);
211                 //SqlHelper.BulkCopy(webframework.common.Config.CONSQL_611_LHETWINDB, "FI_repsource", newdt, newdt.Rows.Count);
212                 Alert("[" + FI_Office + "-" + FI_Aircode + (string.IsNullOrEmpty(EndFlag) ? "" : "-" + EndFlag) + "]导入航司成功[" + newdt.Rows.Count + "],耗时[" + (int)(DateTime.Now - nowtime).TotalSeconds + "]秒");
213             }
214             catch (Exception ex)
215             {
216                 Alert("[" + FI_Office + "-" + FI_Aircode + (string.IsNullOrEmpty(EndFlag) ? "" : "-" + EndFlag) + "]报表导入数据报错:" + ex.Message);
217             }
218             finally
219             {
220                 if (conn != null) conn.Dispose();
221             }
222         }
223         private void InsertCarrier(DataTable dt, string FI_Aircode, string FI_Office)
224         {
225             DataTable newdt = CreateRepsource();
226             MySql.Data.MySqlClient.MySqlConnection conn = new MySqlConnection(webframework.common.Config.CONMYSQL_172_16_6_4_READ);
227             try
228             {
229                 int connum = 0;
230                 int count = 1;
231                 DateTime nowtime = DateTime.Now;
232                 foreach (DataRow dr in dt.Rows)
233                 {
234                     #region<<<数据入库
235 
236                     string tikeno = dr["起始票号"].ToString();
237                     string tikenoend = dr["终止票号"].ToString();
238                     if (string.IsNullOrEmpty(tikeno))
239                         continue;
240                     if (tikeno != tikenoend)
241                     {
242                         string sql = @"SELECT o.outDate,o.orderNo,o.orderFrom,o.shopName,jp.tktNo1 
243 FROM t_order o LEFT JOIN  t_journey j 
244 ON o.id=j.orderId LEFT JOIN t_journeypassenger jp
245 ON j.id=jp.journeyId WHERE o.orderNo=(
246 SELECT o.orderNo
247 FROM t_order o LEFT JOIN  t_journey j 
248 ON o.id=j.orderId LEFT JOIN t_journeypassenger jp
249 ON j.id=jp.journeyId WHERE jp.tktNo1='{0}'
250 )  ";
251                         DataTable ordt = webframework.common.MySqlHelper.ExecuteDataTable(conn, CommandType.Text,
252                                 string.Format(sql, tikeno.Trim()), null);
253                         count = ordt.Rows.Count;
254                     }
255                     else
256                         count = 1;
257 
258                     for (int i = 1; i <= count; i++)
259                     {
260                         DataRow newdr = newdt.NewRow();
261                         newdr["FI_Eticket"] = dr["起始票号"].ToString().Replace("-", "").Trim();
262                         newdr["FI_State"] = dr["订单状态"].ToString().Trim();
263                         newdr["FI_Aircode"] = FI_Aircode.Trim();
264                         newdr["FI_Price"] = decimal.Parse(dr["票价"].ToString()) / count;
265                         newdr["FI_Tax"] = decimal.Parse(dr["机建费"].ToString()) / count;
266                         newdr["FI_Agenfee"] = 0;
267                         newdr["FI_Rate"] = 0;
268                         newdr["FI_Amount1"] = decimal.Parse(dr["支付金额"].ToString()) / count;
269                         newdr["FI_Amount2"] = 0M;
270                         newdr["FI_Voyage"] = dr["起飞城市1"].ToString().Trim() + "-" + dr["目的城市1"].ToString().Trim();
271                         newdr["FI_Flight"] = dr["航班号1"].ToString().Trim();
272                         newdr["FI_Space"] = dr["舱位1"].ToString().Trim();
273                         newdr["FI_Dateto2"] = DateTime.Parse("1900-01-01");
274                         newdr["FI_Dateto1"] = DateTime.Parse(dr["乘机日期1"].ToString());
275                         newdr["FI_DateIss"] = DateTime.Parse(dr["出票日期"].ToString());
276                         newdr["FI_Pnr"] = dr["PNR"].ToString().Trim();
277                         newdr["FI_Vendor"] = dr["代理人号"].ToString().Trim();
278                         newdr["FI_Vnumber"] = dr["操作人"].ToString().Trim();
279                         newdr["FI_Orderno"] = dr["订单号"].ToString().Trim();
280                         newdr["FI_Paybank"] = dr["支付银行"].ToString().Trim();
281                         if (FI_Aircode == "KY")
282                         {
283                             newdr["FI_Bankno"] = dr["支付记帐号"].ToString().Replace("'", "").Trim();
284                         }
285                         else if (FI_Aircode == "ZH")
286                         {
287                             newdr["FI_Bankno"] = dr["支付平台流水号"].ToString().Replace("'", "").Trim();
288                         }
289 
290                         newdr["FI_office"] = FI_Office;
291                         newdr["FI_Cpnr"] = "";
292                         newdr["FI_Jobno"] = "";
293                         newdr["FI_Buyno"] = "";
294                         newdr["FI_DataTyp"] = "B2B";
295                         newdr["FI_Flag"] = "22";
296                         newdr["FI_OpMan"] = "F013";
297                         newdr["FI_OpTime"] = DateTime.Now;
298                         string sql = @"SELECT p.name,p.ptype FROM 
299                                 t_journeypassenger jp LEFT JOIN t_passenger p 
300                                 ON jp.passengerId=p.id WHERE  jp.tktNo1='{0}'  ";
301                         DataTable ordt = webframework.common.MySqlHelper.ExecuteDataTable(conn, CommandType.Text,
302                                 string.Format(sql, tikeno.Trim()), null);
303                         if (ordt.Rows.Count > 0)
304                         {
305                             newdr["FI_toman"] = ordt.Rows[0]["name"].ToString();
306                             newdr["FI_mantype"] = ordt.Rows[0]["ptype"].ToString() == "1" ? "ADT" : "CHD";
307                         }
308                         newdt.Rows.Add(newdr);
309                     }
310                     #endregion
311                     if (connum != 0 && connum % 100 == 0)
312                     {
313                         conn.Close();
314                     }
315                     connum++;
316                 }
317                 SqlHelper.BulkCopy("Initial Catalog=LHETWINDB;Data Source=(local);uid=sa;pwd=123", "FI_repsource", newdt, newdt.Rows.Count);
318 
319                 //SqlHelper.BulkCopy(webframework.common.Config.CONSQL_611_LHETWINDB, "FI_repsource", newdt, newdt.Rows.Count);
320                 Alert("[" + FI_Office + "-" + FI_Aircode + (string.IsNullOrEmpty(EndFlag) ? "" : "-" + EndFlag) + "]导入航司成功[" + newdt.Rows.Count + "],耗时[" + (int)(DateTime.Now - nowtime).TotalSeconds + "]秒");
321             }
322             catch (Exception ex)
323             {
324                 Alert("[" + FI_Office + "-" + FI_Aircode + (string.IsNullOrEmpty(EndFlag) ? "" : "-" + EndFlag) + "]报表导入数据报错:" + ex.Message);
325             }
326             finally
327             {
328                 if (conn != null) conn.Dispose();
329             }
330         }
331 
332         private void InsertCarrierRTemp(DataTable dt, string FI_Aircode, string FI_Office, string EndFlag)
333         {
334             List<modelFI_repsource_excel> list = new List<modelFI_repsource_excel>();
335             try
336             {
337                 DateTime nowtime = DateTime.Now;
338                 foreach (DataRow dr in dt.Rows)
339                 {
340                     //string tikeno = dr["票号"].ToString();
341                     //if (string.IsNullOrEmpty(tikeno))
342                     //    continue;
343                     string pnr = dr["PNR编号"].ToString().Trim();
344                     if (string.IsNullOrEmpty(pnr))
345                         continue;
346                     modelFI_repsource_excel m = new modelFI_repsource_excel();
347                     #region model赋值
348                     m.FI_Eticket = dr["票号"].ToString().Replace("-", "").Trim();
349                     m.FI_Aircode = FI_Aircode.Trim();
350                     m.FI_Price = decimal.Parse(dr["原票金额"].ToString());
351                     m.FI_Tax = decimal.Parse(dr["原票机场税"].ToString());
352                     m.FI_Agenfee = 0;
353                     m.FI_Rate = 0;
354                     m.FI_Amount1 = decimal.Parse(dr["订单支付金额"].ToString());
355                     m.FI_Amount2 = 0M;
356                     m.FI_DateIss = DateTime.Parse(dr["订单支付日期"].ToString());
357                     m.FI_Pnr = dr["PNR编号"].ToString().Trim();
358                     m.FI_Vendor = dr["退票旅行社编号"].ToString().Trim();
359                     m.FI_Vnumber = dr["退票旅行社名称"].ToString().Trim();
360                     m.FI_Orderno = dr["订单编号"].ToString().Trim();
361                     m.FI_Paybank = dr["订单支付银行"].ToString().Trim();
362                     if (FI_Aircode == "KY")
363                     {
364                         m.FI_Bankno = dr["订单支付记帐号"].ToString().Replace("'", "").Trim();
365                     }
366                     else if (FI_Aircode == "ZH")
367                     {
368                         m.FI_Bankno = dr["原支付平台流水号"].ToString().Replace("'", "").Trim();
369                     }
370                     
371                     m.FI_office = FI_Office;
372                     //m.FI_Cpnr = "";
373                     //m.FI_Jobno = "";
374                     //m.FI_Buyno = "";
375                     m.FI_DataTyp = "B2B";
376                     //m.FI_Flag= 22;
377                     //m.FI_OpMan=  "F018";
378                     m.FI_OpTime = DateTime.Now;
379                     //m.FI_toman = "";
380                     //m.FI_mantype = "";
381                     //m.FI_State = "";
382                     //m.FI_Voyage = "";
383                     //m.FI_Flight = "";
384                     //m.FI_Space = "";
385                     m.FI_Dateto2 = DateTime.Parse("1900-01-01");
386                     //m.FI_Dateto1 = null;
387                     #endregion
388                     list.Add(m);
389                 }
390                 string msg = "";
391                 var count = bll.InsertList(list, webframework.common.Config.CONSQL_611_LHETWINDB, ref msg);
392                 Alert("[" + FI_Office + "-" + FI_Aircode + (string.IsNullOrEmpty(EndFlag) ? "" : "-" + EndFlag) + "]导入航司成功[" + msg + "],耗时[" + (int)(DateTime.Now - nowtime).TotalSeconds + "]秒");
393             }
394             catch (Exception ex)
395             {
396                 Alert("[" + FI_Office + "-" + FI_Aircode + (string.IsNullOrEmpty(EndFlag) ? "" : "-" + EndFlag) + "]报表导入数据报错:" + ex.Message);
397             }
398         }
399         private void InsertCarrierTemp(DataTable dt, string FI_Aircode, string FI_Office)
400         {
401             List<modelFI_repsource_excel> list = new List<modelFI_repsource_excel>();
402             try
403             {
404                 DateTime nowtime = DateTime.Now;
405                 foreach (DataRow dr in dt.Rows)
406                 {
407 
408                     //string tikeno = dr["起始票号"].ToString();
409                     //string tikenoend = dr["终止票号"].ToString();
410                     //if (string.IsNullOrEmpty(tikeno))
411                     //    continue;
412                     string pnr = dr["PNR"].ToString().Trim();
413                     if (string.IsNullOrEmpty(pnr))
414                         continue;
415                     modelFI_repsource_excel m = new modelFI_repsource_excel();
416                     #region model赋值
417                     m.FI_Eticket = dr["起始票号"].ToString().Replace("-", "").Trim();
418                     m.FI_State = dr["订单状态"].ToString().Trim();
419                     m.FI_Aircode = FI_Aircode.Trim();
420                     m.FI_Price = decimal.Parse(dr["票价"].ToString());
421                     m.FI_Tax = decimal.Parse(dr["机建费"].ToString());
422                     m.FI_Agenfee = 0;
423                     m.FI_Rate = 0;
424                     m.FI_Amount1 = decimal.Parse(dr["支付金额"].ToString());
425                     m.FI_Amount2 = 0M;
426                     m.FI_Voyage = dr["起飞城市1"].ToString().Trim() + "-" + dr["目的城市1"].ToString().Trim();
427                     m.FI_Flight = dr["航班号1"].ToString().Trim();
428                     m.FI_Space = dr["舱位1"].ToString().Trim();
429                     m.FI_Dateto2 = DateTime.Parse("1900-01-01");
430                     m.FI_Dateto1 = DateTime.Parse(dr["乘机日期1"].ToString());
431                     m.FI_DateIss = DateTime.Parse(dr["出票日期"].ToString());
432                     m.FI_Pnr = dr["PNR"].ToString().Trim();
433                     m.FI_Vendor = dr["代理人号"].ToString().Trim();
434                     m.FI_Vnumber = dr["操作人"].ToString().Trim();
435                     m.FI_Orderno = dr["订单号"].ToString().Trim();
436                     m.FI_Paybank = dr["支付银行"].ToString().Trim();
437                     if (FI_Aircode == "KY")
438                     {
439                         m.FI_Bankno = dr["支付记帐号"].ToString().Replace("'", "").Trim();
440                     }
441                     else if (FI_Aircode == "ZH")
442                     {
443                         m.FI_Bankno = dr["支付平台流水号"].ToString().Replace("'", "").Trim();
444                     }
445 
446                     m.FI_office = FI_Office;
447                     //m.FI_Cpnr = "";
448                     //m.FI_Jobno = "";
449                     //m.FI_Buyno = "";
450                     m.FI_DataTyp = "B2B";
451                     //m.FI_Flag = 0;
452                     //m.FI_OpMan = "";
453                     m.FI_OpTime = DateTime.Now;
454                     #endregion
455                     list.Add(m);
456                 }
457                 string msg = "";
458                 var count = bll.InsertList(list, webframework.common.Config.CONSQL_611_LHETWINDB,ref msg);
459                 Alert("[" + FI_Office + "-" + FI_Aircode + (string.IsNullOrEmpty(EndFlag) ? "" : "-" + EndFlag) + "]导入航司成功[" + msg + "],耗时[" + (int)(DateTime.Now - nowtime).TotalSeconds + "]秒");
460             }
461             catch (Exception ex)
462             {
463                 Alert("[" + FI_Office + "-" + FI_Aircode + (string.IsNullOrEmpty(EndFlag) ? "" : "-" + EndFlag) + "]报表导入数据报错:" + ex.Message);
464             }
465         }
466         protected void Button1_Click(object sender, EventArgs e)
467         {
468             if (dt == null || dt.Rows.Count == 0) return;
469             if (FI_Office.Equals("AAA111") && (FI_Aircode.Equals("KY") || FI_Aircode.Equals("ZH")))
470             {
471                 if (string.IsNullOrEmpty(EndFlag))
472                     InsertCarrierTemp(dt, FI_Aircode, FI_Office);
473                 else
474                     InsertCarrierRTemp(dt, FI_Aircode, FI_Office, EndFlag);
475             }
476             else
477             {
478 
479             }
480         }
481 
482 
483 
484         private DataTable CreateRepsource()
485         {
486             DataTable dt = new DataTable();
487             dt.Columns.Add("FI_Eticket", typeof(System.String));
488             dt.Columns.Add("FI_State", typeof(System.String));
489             dt.Columns.Add("FI_Aircode", typeof(System.String));
490             dt.Columns.Add("FI_Price", typeof(System.Decimal));
491             dt.Columns.Add("FI_Tax", typeof(System.Decimal));
492             dt.Columns.Add("FI_Agenfee", typeof(System.Decimal));
493             dt.Columns.Add("FI_Rate", typeof(System.Decimal));
494             dt.Columns.Add("FI_Amount1", typeof(System.Decimal));
495             dt.Columns.Add("FI_Amount2", typeof(System.Decimal));
496             dt.Columns.Add("FI_Voyage", typeof(System.String));
497             dt.Columns.Add("FI_Flight", typeof(System.String));
498             dt.Columns.Add("FI_Space", typeof(System.String));
499             dt.Columns.Add("FI_DateIss", typeof(System.DateTime));
500             dt.Columns.Add("FI_Dateto1", typeof(System.DateTime));
501             dt.Columns.Add("FI_Pnr", typeof(System.String));
502             dt.Columns.Add("FI_Vendor", typeof(System.String));
503             dt.Columns.Add("FI_Vnumber", typeof(System.String));
504             dt.Columns.Add("FI_Orderno", typeof(System.String));
505             dt.Columns.Add("FI_Paybank", typeof(System.String));
506             dt.Columns.Add("FI_Bankno", typeof(System.String));
507             dt.Columns.Add("FI_office", typeof(System.String));
508             dt.Columns.Add("FI_Cpnr", typeof(System.String));
509             dt.Columns.Add("FI_toman", typeof(System.String));
510             dt.Columns.Add("FI_Jobno", typeof(System.String));
511             dt.Columns.Add("FI_Buyno", typeof(System.String));
512             dt.Columns.Add("FI_Dateto2", typeof(System.DateTime));
513             dt.Columns.Add("FI_mantype", typeof(System.String));
514             dt.Columns.Add("FI_DataTyp", typeof(System.String));
515             dt.Columns.Add("FI_Flag", typeof(System.Int32));
516             dt.Columns.Add("FI_OpMan", typeof(System.String));
517             dt.Columns.Add("FI_OpTime", typeof(System.DateTime));
518             return dt;
519         }
520 
521         /// <summary>
522         /// 
523         /// </summary>
524         /// <param name="orderstate">订单状态(0未出票1已出票2已取消3已改签4已退款5出票失败6出票中9已退票10.二次出票)(dtom)</param>
525         /// <returns></returns>
526         private string GetOrderStateDesc(string orderstate)
527         {
528             string result = "";
529             switch (orderstate)
530             {
531                 case "0":
532                     result = "未出票";
533                     break;
534                 case "1":
535                     result = "已出票";
536                     break;
537                 case "2":
538                     result = "已取消";
539                     break;
540                 case "3":
541                     result = "已改签";
542                     break;
543                 case "4":
544                     result = "已退款";
545                     break;
546                 case "5":
547                     result = "出票失败";
548                     break;
549                 case "6":
550                     result = "出票中";
551                     break;
552                 case "9":
553                     result = "已退票";
554                     break;
555                 case "10":
556                     result = "二次出票";
557                     break;
558                 default:
559                     break;
560             }
561             return result;
562         }
563     }
564 }
View Code

 

ExcelHelper:

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NPOI.SS.Converter;
using System.Web;

namespace Utility
{
    public class ExcelUtils
    {
        public static string ExcelContentType
        {
            get
            {
                return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            }
        }

        ///// <summary>
        ///// 导出Excel
        ///// </summary>
        ///// <typeparam name="T"></typeparam>
        ///// <param name="data"></param>
        ///// <param name="headDict"></param>
        ///// <param name="sheetName"></param>
        ///// <returns></returns>
        //public static byte[] ExportExcel<T>(List<T> data, Dictionary<string, string> headDict, string sheetName = "", bool showSrNo = false)
        //{
        //    DataTable dt = ListToDataTable<T>(data);
        //    byte[] result = null;
        //    List<string> keyList = new List<string>();
        //    if (showSrNo)
        //    {
        //        keyList.Add("RowNum");
        //        dt.Columns.Add("RowNum");
        //        for (int i = 0; i < dt.Rows.Count; i++)
        //        {
        //            dt.Rows[i]["RowNum"] = i + 1;
        //        }

        //    }
        //    //通过键的集合取
        //    foreach (string key in headDict.Keys)
        //    {
        //        keyList.Add(key);
        //    }
        //    using (ExcelPackage package = new ExcelPackage())
        //    {
        //        ExcelWorksheet sheet = package.Workbook.Worksheets.Add(sheetName.IsNullOrEmpty() ? "Sheet1" : sheetName);
        //        if (showSrNo)
        //        {
        //            headDict.Add("RowNum", "序号");
        //        }
        //        for (int i = 0; i < keyList.Count; i++)
        //        {
        //            sheet.Cells[1, i + 1].Value = headDict[keyList[i]];
        //        }
        //        if (dt.Rows.Count > 0)
        //        {

        //            for (int i = 0; i < dt.Rows.Count; i++)
        //            {
        //                for (int j = 0; j < keyList.Count; j++)
        //                {

        //                    sheet.Cells[i + 2, j + 1].Value = dt.Rows[i][keyList[j]].ToString();
        //                }
        //            }
        //        }
        //        ExcelRange cells = sheet.Cells[1, 1, 1 + dt.Rows.Count, keyList.Count];
        //        cells.Style.Border.Left.Style = ExcelBorderStyle.Thin;
        //        cells.Style.Border.Right.Style = ExcelBorderStyle.Thin;
        //        cells.Style.Border.Top.Style = ExcelBorderStyle.Thin;
        //        cells.Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
        //        cells.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;//水平居中
        //        cells.Style.VerticalAlignment = ExcelVerticalAlignment.Center;//垂直居中
        //        cells.AutoFitColumns();//自适应列宽
        //        result = package.GetAsByteArray();
        //    }
        //    return result;
        //}

        public static DataTable ImportExcel(string filePath)
        {
            DataTable dt = new DataTable();
            using (FileStream fsRead = System.IO.File.OpenRead(filePath))
            {
                IWorkbook wk = null;
                //获取后缀名
                string extension = filePath.Substring(filePath.LastIndexOf(".")).ToString().ToLower();
                //判断是否是excel文件
                if (extension == ".xlsx" || extension == ".xls")
                {
                    //判断excel的版本
                    if (extension == ".xlsx")
                    {
                        wk = new XSSFWorkbook(fsRead);
                    }
                    else
                    {
                        wk = new HSSFWorkbook(fsRead);
                    }

                    //获取第一个sheet
                    ISheet sheet = wk.GetSheetAt(0);
                    //获取第一行
                    IRow headrow = sheet.GetRow(0);
                    //创建列
                    int colCount = headrow.Cells.Count;
                    for (int i = 0; i < headrow.Cells.Count; i++)
                    {
                        DataColumn datacolum = new DataColumn("Col" + (i + 1));
                        dt.Columns.Add(datacolum);
                    }
                    dt.Columns.Add("OrderCode");
                    //读取每行,从第二行起
                    for (int r = 1; r <= sheet.LastRowNum; r++)
                    {
                        DataRow dr = dt.NewRow();
                        //获取当前行
                        IRow row = sheet.GetRow(r);
                        //读取每列
                        for (int j = 0; j < colCount; j++)
                        {
                            ICell cell = row.GetCell(j); //一个单元格
                            dr[j] = GetCellValue(cell); //获取单元格的值
                        }
                        dr["OrderCode"] = r;
                        dt.Rows.Add(dr); //把每行追加到DataTable
                    }
                }

            }
            return dt;
        }

        public static void ReadExcel(string filePath, Action<IWorkbook> action)
        {
            using (FileStream fsRead = System.IO.File.OpenRead(filePath))
            {
                IWorkbook wk = null;
                //获取后缀名
                string extension = filePath.Substring(filePath.LastIndexOf(".")).ToString().ToLower();
                //判断是否是excel文件
                if (extension == ".xlsx" || extension == ".xls")
                {
                    //判断excel的版本
                    if (extension == ".xlsx")
                    {
                        wk = new XSSFWorkbook(fsRead);
                    }
                    else
                    {
                        wk = new HSSFWorkbook(fsRead);
                    }
                    action(wk);
                }
            }
        }

        //对单元格进行判断取值
        public static string GetCellValue(ICell cell)
        {
            if (cell == null)
                return string.Empty;
            switch (cell.CellType)
            {
                case CellType.Blank: //空数据类型 这里类型注意一下,不同版本NPOI大小写可能不一样,有的版本是Blank(首字母大写)
                    return string.Empty;
                case CellType.Boolean: //bool类型
                    return cell.BooleanCellValue.ToString();
                case CellType.Error:
                    return cell.ErrorCellValue.ToString();
                case CellType.Numeric: //数字类型
                    if (HSSFDateUtil.IsCellDateFormatted(cell))//日期类型
                    {
                        return cell.DateCellValue.ToString();
                    }
                    else //其它数字
                    {
                        return cell.NumericCellValue.ToString();
                    }
                case CellType.Unknown: //无法识别类型
                default: //默认类型
                    return cell.ToString();//
                case CellType.String: //string 类型
                    return cell.StringCellValue;
                case CellType.Formula: //带公式类型
                    try
                    {
                        HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(cell.Sheet.Workbook);
                        e.EvaluateInCell(cell);
                        return cell.ToString();
                    }
                    catch
                    {
                        return cell.NumericCellValue.ToString();
                    }
            }
        }

        ///// <summary>
        ///// 导出Excel
        ///// </summary>
        ///// <typeparam name="T"></typeparam>
        ///// <param name="data">数据</param>
        ///// <param name="headDict">头部信息</param>
        ///// <param name="imgColumnList">图片列</param>
        ///// <param name="sheetName">Sheet名</param>
        ///// <param name="showSrNo">是否要加上序号</param>
        ///// <returns></returns>
        //public static byte[] ExportExcel<T>(List<T> data, Dictionary<string, string> headDict, List<string> imgColumnList, string sheetName = "", bool showSrNo = false)
        //{
        //    if (imgColumnList == null)
        //    {
        //        imgColumnList = new List<string>();
        //    }
        //    DataTable dt = ListToDataTable<T>(data);
        //    byte[] result = null;
        //    List<string> keyList = new List<string>();
        //    if (showSrNo)
        //    {
        //        keyList.Add("RowNum");
        //        dt.Columns.Add("RowNum");
        //        for (int i = 0; i < dt.Rows.Count; i++)
        //        {
        //            dt.Rows[i]["RowNum"] = i + 1;
        //        }

        //    }
        //    //通过键的集合取
        //    foreach (string key in headDict.Keys)
        //    {
        //        keyList.Add(key);
        //    }
        //    IWorkbook workbook = new XSSFWorkbook();
        //    //设置宽度
        //    ICellStyle style = workbook.CreateCellStyle();
        //    style.BorderBottom = BorderStyle.Thin;
        //    style.BorderLeft = BorderStyle.Thin;
        //    style.BorderRight = BorderStyle.Thin;
        //    style.BorderTop = BorderStyle.Thin;
        //    style.VerticalAlignment = VerticalAlignment.Center;//垂直居中
        //    style.Alignment = HorizontalAlignment.Center;//水平对齐;

        //    if (showSrNo)
        //    {
        //        headDict.Add("RowNum", "序号");
        //    }
        //    ISheet sheet = sheetName.IsNullOrEmpty() ? workbook.CreateSheet("Sheet1") : workbook.CreateSheet(sheetName);
        //    //表头  
        //    IRow row = sheet.CreateRow(0);
        //    for (int i = 0; i < keyList.Count; i++)
        //    {
        //        ICell cell = row.CreateCell(i);
        //        cell.SetCellValue(headDict[keyList[i]]);
        //        cell.CellStyle = style;
        //    }
        //    //数据  
        //    for (int i = 0; i < dt.Rows.Count; i++)
        //    {
        //        IRow row1 = sheet.CreateRow(i + 1);
        //        for (int j = 0; j < keyList.Count; j++)
        //        {
        //            if (imgColumnList.Contains(keyList[j]))
        //            {
        //                //插入图片
        //                byte[] bytes = HttpMethods.GetImage(dt.Rows[i][keyList[j]].ToString());
        //                if (bytes != null)
        //                {
        //                    ICell cell = row1.CreateCell(j);
        //                    cell.CellStyle = style;
        //                    try
        //                    {
        //                        int pictureIdx = workbook.AddPicture(bytes, NPOI.SS.UserModel.PictureType.PNG);
        //                        IDrawing patriarch = sheet.CreateDrawingPatriarch();
        //                        XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 100, 100, j, i + 1, j + 1, i + 2);
        //                        //##处理照片位置,【图片左上角为(col, row)第row+1行col+1列,右下角为( col +1, row +1)第 col +1+1行row +1+1列,宽为100,高为50
        //                        XSSFPicture pict = (XSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);
        //                    }
        //                    catch
        //                    {
        //                        cell.SetCellValue(dt.Rows[i][keyList[j]].ToString());
        //                    }
        //                }
        //            }
        //            else
        //            {
        //                ICell cell = row1.CreateCell(j);
        //                cell.SetCellValue(dt.Rows[i][keyList[j]].ToString());
        //                cell.CellStyle = style;
        //            }
        //        }
        //    }
        //    //自适应列宽
        //    for (int i = 0; i < keyList.Count; i++)
        //    {
        //        sheet.AutoSizeColumn(i, true);
        //    }
        //    using (MemoryStream ms = new MemoryStream())
        //    {
        //        workbook.Write(ms);
        //        result = ms.GetBuffer();
        //        ms.Close();
        //    };
        //    return result;
        //}



        ///// <summary>
        ///// 导出Excel
        ///// </summary>
        ///// <param name="dataTable">数据源</param>
        ///// <param name="heading">工作簿Worksheet</param>
        ///// <param name="showSrNo">//是否显示行编号</param>
        ///// <param name="columnsToTake">要导出的列</param>
        ///// <returns></returns>
        //public static byte[] ExportExcel(DataTable dataTable, string heading = "", bool showSrNo = false, params string[] columnsToTake)
        //{
        //    byte[] result = null;
        //    using (ExcelPackage package = new ExcelPackage())
        //    {
        //        ExcelWorksheet workSheet = package.Workbook.Worksheets.Add(string.Format("{0}Data", heading));
        //        int startRowFrom = string.IsNullOrEmpty(heading) ? 1 : 3; //开始的行
        //                                                                  //是否显示行编号
        //        if (showSrNo)
        //        {
        //            DataColumn dataColumn = dataTable.Columns.Add("#", typeof(int));
        //            dataColumn.SetOrdinal(0);
        //            int index = 1;
        //            foreach (DataRow item in dataTable.Rows)
        //            {
        //                item[0] = index;
        //                index++;
        //            }
        //        }
        //        //Add Content Into the Excel File
        //        workSheet.Cells["A" + startRowFrom].LoadFromDataTable(dataTable, true);
        //        // autofit width of cells with small content 
        //        int columnIndex = 1;
        //        foreach (DataColumn item in dataTable.Columns)
        //        {
        //            ExcelRange columnCells = workSheet.Cells[workSheet.Dimension.Start.Row, columnIndex, workSheet.Dimension.End.Row, columnIndex];
        //            int maxLength = columnCells.Max(cell => cell.Value.ToString().Count());
        //            if (maxLength < 150)
        //            {
        //                workSheet.Column(columnIndex).AutoFit();
        //            }
        //            columnIndex++;
        //        }
        //        // format header - bold, yellow on black 
        //        using (ExcelRange r = workSheet.Cells[startRowFrom, 1, startRowFrom, dataTable.Columns.Count])
        //        {
        //            r.Style.Font.Color.SetColor(System.Drawing.Color.White);
        //            r.Style.Font.Bold = true;
        //            r.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
        //            r.Style.Fill.BackgroundColor.SetColor(System.Drawing.ColorTranslator.FromHtml("#1fb5ad"));
        //        }
        //        // format cells - add borders 
        //        using (ExcelRange r = workSheet.Cells[startRowFrom + 1, 1, startRowFrom + dataTable.Rows.Count, dataTable.Columns.Count])
        //        {
        //            r.Style.Border.Top.Style = ExcelBorderStyle.Thin;
        //            r.Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
        //            r.Style.Border.Left.Style = ExcelBorderStyle.Thin;
        //            r.Style.Border.Right.Style = ExcelBorderStyle.Thin;

        //            r.Style.Border.Top.Color.SetColor(System.Drawing.Color.Black);
        //            r.Style.Border.Bottom.Color.SetColor(System.Drawing.Color.Black);
        //            r.Style.Border.Left.Color.SetColor(System.Drawing.Color.Black);
        //            r.Style.Border.Right.Color.SetColor(System.Drawing.Color.Black);
        //        }
        //        // removed ignored columns 
        //        for (int i = dataTable.Columns.Count - 1; i >= 0; i--)
        //        {
        //            if (i == 0 && showSrNo)
        //            {
        //                continue;
        //            }
        //            if (!columnsToTake.Contains(dataTable.Columns[i].ColumnName))
        //            {
        //                workSheet.DeleteColumn(i + 1);
        //            }
        //        }
        //        if (!String.IsNullOrEmpty(heading))
        //        {
        //            workSheet.Cells["A1"].Value = heading;
        //            workSheet.Cells["A1"].Style.Font.Size = 20;

        //            workSheet.InsertColumn(1, 1);
        //            workSheet.InsertRow(1, 1);
        //            workSheet.Column(1).Width = 5;
        //        }
        //        result = package.GetAsByteArray();
        //    }
        //    return result;
        //}
        ///// <summary>
        ///// 导出Excel
        ///// </summary>
        ///// <typeparam name="T"></typeparam>
        ///// <param name="data"></param>
        ///// <param name="heading"></param>
        ///// <param name="isShowSlNo"></param>
        ///// <param name="ColumnsToTake"></param>
        ///// <returns></returns>
        //public static byte[] ExportExcel<T>(List<T> data, string heading = "", bool isShowSlNo = false, params string[] ColumnsToTake)
        //{
        //    return ExportExcel(ListToDataTable<T>(data), heading, isShowSlNo, ColumnsToTake);
        //}


        /// <summary>
        /// List转DataTable
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="data"></param>
        /// <returns></returns>
        public static DataTable ListToDataTable<T>(List<T> data)
        {
            PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
            System.Data.DataTable dataTable = new DataTable();
            for (int i = 0; i < properties.Count; i++)
            {
                PropertyDescriptor property = properties[i];
                dataTable.Columns.Add(property.Name, Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType);
            }
            object[] values = new object[properties.Count];
            foreach (T item in data)
            {
                for (int i = 0; i < values.Length; i++)
                {
                    values[i] = properties[i].GetValue(item);
                }
                dataTable.Rows.Add(values);
            }
            return dataTable;
        }

        public static object lockObj = new object();

        //public static string Excel2html(HttpRequestBase request, string strFile)
        //{
        //    //资源锁,为了保证该资源只能存在一个
        //    lock (lockObj)
        //    {
        //        string temp = request.MapPath("/Uploads/Temp/");
        //        temp = temp.Replace("\\", "/");
        //        if (!temp.EndsWith("/")) temp += "/";
        //        temp = temp + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
        //        temp = temp.Replace("/", "\\");
        //        //将strFile另存为xls  可能为旧版的xls  也可能是xlsx  统一转成03 xp版的xls文件
        //        try
        //        {
        //            object oMissing = Type.Missing;
        //            var app = new Microsoft.Office.Interop.Excel.Application();
        //            var wb = app.Workbooks.Open(strFile, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);
        //            wb.CheckCompatibility = false;
        //            app.DisplayAlerts = false;
        //            wb.DoNotPromptForConvert = true;
        //            wb.SaveAs(temp, Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel8, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
        //            app.Quit();
        //            //垃圾回收 
        //            //GC.Collect();
        //            //System.Runtime.InteropServices.Marshal.ReleaseComObject(wb);
        //            //wb = null;
        //            //GC.Collect();
        //            //依据时间杀灭进程
        //            System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName("EXCEL");
        //            foreach (System.Diagnostics.Process p in process)
        //            {
        //                LogHelper.WriteLog("正在关闭Excel");
        //                p.Kill();
        //            }
        //            GC.Collect();
        //        }
        //        //转换失败
        //        catch (Exception ex)
        //        {
        //            LogHelper.WriteLog("1");
        //            LogHelper.WriteLog(ex.Message);
        //            try { File.Delete(temp); } catch { }
        //            return "";
        //        }
        //        //文档转换成功,利用NPOI将Excel转为html
        //        string html = "";
        //        try
        //        {
        //            HSSFWorkbook workbook = ExcelToHtmlUtils.LoadXls(temp);
        //            ExcelToHtmlConverter excelToHtmlConverter = new ExcelToHtmlConverter();
        //            excelToHtmlConverter.OutputColumnHeaders = false;
        //            excelToHtmlConverter.OutputHiddenColumns = false;
        //            excelToHtmlConverter.OutputHiddenRows = false;
        //            excelToHtmlConverter.OutputLeadingSpacesAsNonBreaking = false;
        //            excelToHtmlConverter.OutputRowNumbers = false;
        //            excelToHtmlConverter.UseDivsToSpan = false;
        //            //excelToHtmlConverter.ProcessWorkbook(workbook);
        //            // 处理的Excel文件
        //            excelToHtmlConverter.ProcessWorkbook(workbook);
        //            //添加表格样式
        //            excelToHtmlConverter.Document.InnerXml =
        //                excelToHtmlConverter.Document.InnerXml.Insert(
        //                    excelToHtmlConverter.Document.InnerXml.IndexOf("<head>", 0) + 6,
        //                    @"<style>table, td, th{border:1px solid green;}th{background-color:green;color:white;}</style>"
        //                );
        //            //方法一
        //            html = excelToHtmlConverter.Document.InnerXml;
        //        }
        //        catch (Exception exp)
        //        {
        //            LogHelper.WriteLog("2");
        //            LogHelper.WriteLog(exp.Message);
        //            html = "";
        //        }
        //        finally
        //        {
        //            //没问题,最后将临时文件删除
        //            try { File.Delete(temp); } catch { }
        //        }
        //        return html;
        //    }
        //}


        public static string Excel2html2(string strFile)
        {
            //资源锁,为了保证该资源只能存在一个
            lock (lockObj)
            {
                //文档转换成功,利用NPOI将Excel转为html
                string html = "";
                try
                {
                    HSSFWorkbook workbook = ExcelToHtmlUtils.LoadXls(strFile);
                    ExcelToHtmlConverter excelToHtmlConverter = new ExcelToHtmlConverter();
                    excelToHtmlConverter.OutputColumnHeaders = false;
                    excelToHtmlConverter.OutputHiddenColumns = false;
                    excelToHtmlConverter.OutputHiddenRows = false;
                    excelToHtmlConverter.OutputLeadingSpacesAsNonBreaking = false;
                    excelToHtmlConverter.OutputRowNumbers = false;
                    excelToHtmlConverter.UseDivsToSpan = false;
                    // 处理的Excel文件
                    excelToHtmlConverter.ProcessWorkbook(workbook);
                    //添加表格样式
                    excelToHtmlConverter.Document.InnerXml =
                        excelToHtmlConverter.Document.InnerXml.Insert(
                            excelToHtmlConverter.Document.InnerXml.IndexOf("<head>", 0) + 6,
                            @"<style>table, td, th{border:1px solid green;}th{background-color:green;color:white;}</style>"
                        );
                    //方法一
                    html = excelToHtmlConverter.Document.InnerXml;
                    html += @"<style>tr:nth-of-type(1){background: #fcf;white-space: no-wrap;}</style>";
                    html += @"<script>var col = document.getElementsByTagName('col');for(i=0;i<col.length;i++){col[i].setAttribute('width','70');}</script>";
                }
                catch
                {
                    html = "";
                }
                return html;
            }
        }

        public static string Excel2html3(string strFile)
        {
            //资源锁,为了保证该资源只能存在一个
            lock (lockObj)
            {
                //文档转换成功,利用NPOI将Excel转为html
                string html = "";
                try
                {
                    HSSFWorkbook workbook = ExcelToHtmlUtils.LoadXls(strFile);
                    ExcelToHtmlConverter excelToHtmlConverter = new ExcelToHtmlConverter();
                    excelToHtmlConverter.OutputColumnHeaders = false;
                    excelToHtmlConverter.OutputHiddenColumns = false;
                    excelToHtmlConverter.OutputHiddenRows = false;
                    excelToHtmlConverter.OutputLeadingSpacesAsNonBreaking = false;
                    excelToHtmlConverter.OutputRowNumbers = false;
                    excelToHtmlConverter.UseDivsToSpan = false;
                    // 处理的Excel文件
                    excelToHtmlConverter.ProcessWorkbook(workbook);
                    //添加表格样式
                    excelToHtmlConverter.Document.InnerXml =
                        excelToHtmlConverter.Document.InnerXml.Insert(
                            excelToHtmlConverter.Document.InnerXml.IndexOf("<head>", 0) + 6,
                            @"<style>table, td, th{border:1px solid green;}th{background-color:green;color:white;}</style>"
                        );
                    //方法一
                    html = excelToHtmlConverter.Document.InnerXml;
                    html += @"<style>tr:nth-of-type(1){background: #fcf;white-space: no-wrap;}</style>";
                    html += @"<script>var col = document.getElementsByTagName('col');for(i=0;i<col.length;i++){col[i].setAttribute('width','220');}</script>";
                }
                catch
                {
                    html = "";
                }
                return html;
            }
        }


        /// <summary>
        /// DataTable创建excel 2003   .xls
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="path"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public static bool CreateExcel(DataTable dt, string path, string name)
        {
            List<string> exceltitlelist = new List<string>();
            foreach (DataColumn dc in dt.Columns)
            {
                exceltitlelist.Add(dc.ColumnName);
            }
            try
            {
                NPOI.HSSF.UserModel.HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook();
                NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet(name);
                sheet.AutoSizeColumn(0);
                var cellFont = workbook.CreateFont();
                var cellStyle = workbook.CreateCellStyle();
                var cellStyle2 = workbook.CreateCellStyle();
                ////- 加粗,白色前景色
                cellFont.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold;
                cellFont.FontHeightInPoints = 12;//设置字号为12
                ////- 这个是填充的模式,可以是网格、花式等。如果需要填充单色,请使用:SOLID_FOREGROUND
                ////cellStyle.FillPattern = NPOI.SS.UserModel.FillPatternType.SOLID_FOREGROUND;
                ////- 设置这个样式的字体,如果没有设置,将与所有单元格拥有共同字体!
                cellStyle.SetFont(cellFont);
                cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                cellStyle2.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                //CellStyle cellStyleDate = workbook.CreateCellStyle();
                //DataFormat format = workbook.CreateDataFormat();
                //cellStyleDate.DataFormat = format.GetFormat("yyyy年m月d日");                                            

                string[] titles = exceltitlelist.ToArray();

                int rowIndex = 0;
                NPOI.SS.UserModel.IRow row = sheet.CreateRow(rowIndex);
                for (int i = 0; i < titles.Length; i++) //生成sheet第一行列名 
                {
                    NPOI.SS.UserModel.ICell celltmp = row.CreateCell(i);
                    celltmp.SetCellValue(titles[i]);
                    celltmp.CellStyle = cellStyle;
                }
                NPOI.SS.UserModel.ICell cell;
                rowIndex++;
                string tmp;
                DataRow m;

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    try
                    {
                        m = dt.Rows[i];
                        row = sheet.CreateRow(rowIndex);

                        for (int j = 0; j < titles.Length; j++)
                        {
                            cell = row.CreateCell(j);
                            cell.CellStyle = cellStyle2;
                            cell.SetCellValue(m.ItemArray[j].ToString());
                        }
                        rowIndex++;
                    }
                    catch (Exception e1)
                    {
                        //logclass.Debug("===== 生成excel报错 =====" + e1.Message);
                    }

                }

                sheet.ForceFormulaRecalculation = true;

                using (FileStream file = new FileStream(path, FileMode.Create))
                {
                    workbook.Write(file);  //创建xls文件。
                    file.Close();
                }
            }
            catch (Exception e)
            {
                //policyframework.common.logclass.Debug("=====CreateExcel 生成excel报错 =====" + e.Message);
                return false;
            }
            return true;
        }
        /// <summary>
        /// DataTable创建excel 2007  .xlsx
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="path"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public static bool CreateExcel2007(DataTable dt, string path, string name)
        {
            List<string> exceltitlelist = new List<string>();
            foreach (DataColumn dc in dt.Columns)
            {
                exceltitlelist.Add(dc.ColumnName);
            }
            try
            {
                NPOI.XSSF.UserModel.XSSFWorkbook workbook = new XSSFWorkbook();
                NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet(name);
                sheet.AutoSizeColumn(0);
                var cellFont = workbook.CreateFont();
                var cellStyle = workbook.CreateCellStyle();
                var cellStyle2 = workbook.CreateCellStyle();
                ////- 加粗,白色前景色
                cellFont.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold;
                cellFont.FontHeightInPoints = 12;//设置字号为12
                ////- 这个是填充的模式,可以是网格、花式等。如果需要填充单色,请使用:SOLID_FOREGROUND
                ////cellStyle.FillPattern = NPOI.SS.UserModel.FillPatternType.SOLID_FOREGROUND;
                ////- 设置这个样式的字体,如果没有设置,将与所有单元格拥有共同字体!
                cellStyle.SetFont(cellFont);
                cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                cellStyle2.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                //CellStyle cellStyleDate = workbook.CreateCellStyle();
                //DataFormat format = workbook.CreateDataFormat();
                //cellStyleDate.DataFormat = format.GetFormat("yyyy年m月d日");                                            

                string[] titles = exceltitlelist.ToArray();

                int rowIndex = 0;
                NPOI.SS.UserModel.IRow row = sheet.CreateRow(rowIndex);
                for (int i = 0; i < titles.Length; i++) //生成sheet第一行列名 
                {
                    NPOI.SS.UserModel.ICell celltmp = row.CreateCell(i);
                    celltmp.SetCellValue(titles[i]);
                    celltmp.CellStyle = cellStyle;
                }
                NPOI.SS.UserModel.ICell cell;
                rowIndex++;
                string tmp;
                DataRow m;

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    try
                    {
                        m = dt.Rows[i];
                        row = sheet.CreateRow(rowIndex);

                        for (int j = 0; j < titles.Length; j++)
                        {
                            cell = row.CreateCell(j);
                            cell.CellStyle = cellStyle2;
                            cell.SetCellValue(m.ItemArray[j].ToString());
                        }
                        rowIndex++;
                    }
                    catch (Exception e1)
                    {
                        //logclass.Debug("===== 生成excel报错 =====" + e1.Message);
                    }

                }

                sheet.ForceFormulaRecalculation = true;

                using (FileStream file = new FileStream(path, FileMode.Create))
                {
                    workbook.Write(file);  //创建xlsx文件。
                    file.Close();
                }
            }
            catch (Exception e)
            {
                //policyframework.common.logclass.Debug("=====CreateExcel 生成excel报错 =====" + e.Message);
                return false;
            }
            return true;
        }

        public static void ExportDtToExcel(DataTable dt,string name)
        {           
            try
            {
                List<string> exceltitlelist = new List<string>();
                foreach (DataColumn dc in dt.Columns)
                {
                    exceltitlelist.Add(dc.ColumnName);
                }

                NPOI.XSSF.UserModel.XSSFWorkbook workbook = new XSSFWorkbook();
                NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet(name);
                sheet.AutoSizeColumn(0);
                var cellFont = workbook.CreateFont();
                var cellStyle = workbook.CreateCellStyle();
                var cellStyle2 = workbook.CreateCellStyle();
                ////- 加粗,白色前景色
                cellFont.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold;
                cellFont.FontHeightInPoints = 12;//设置字号为12
                ////- 这个是填充的模式,可以是网格、花式等。如果需要填充单色,请使用:SOLID_FOREGROUND
                ////cellStyle.FillPattern = NPOI.SS.UserModel.FillPatternType.SOLID_FOREGROUND;
                ////- 设置这个样式的字体,如果没有设置,将与所有单元格拥有共同字体!
                cellStyle.SetFont(cellFont);
                cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                cellStyle2.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                //CellStyle cellStyleDate = workbook.CreateCellStyle();
                //DataFormat format = workbook.CreateDataFormat();
                //cellStyleDate.DataFormat = format.GetFormat("yyyy年m月d日");                                            

                string[] titles = exceltitlelist.ToArray();

                int rowIndex = 0;
                NPOI.SS.UserModel.IRow row = sheet.CreateRow(rowIndex);
                for (int i = 0; i < titles.Length; i++) //生成sheet第一行列名 
                {
                    NPOI.SS.UserModel.ICell celltmp = row.CreateCell(i);
                    celltmp.SetCellValue(titles[i]);
                    celltmp.CellStyle = cellStyle;
                }
                NPOI.SS.UserModel.ICell cell;
                rowIndex++;
                string tmp;
                DataRow m;

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    try
                    {
                        m = dt.Rows[i];
                        row = sheet.CreateRow(rowIndex);

                        for (int j = 0; j < titles.Length; j++)
                        {
                            cell = row.CreateCell(j);
                            cell.CellStyle = cellStyle2;
                            cell.SetCellValue(m.ItemArray[j].ToString());
                        }
                        rowIndex++;
                    }
                    catch (Exception e1)
                    {
                        //logclass.Debug("===== 生成excel报错 =====" + e1.Message);
                    }

                }

                sheet.ForceFormulaRecalculation = true;

                // 清理脏数据
                HttpContext.Current.Response.Clear(); 
                MemoryStream ms = new MemoryStream();
                workbook.Write(ms);
                byte[] bytes = ms.ToArray();
                HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                //通知浏览器下载文件而不是打开
                HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;  filename=" + HttpUtility.UrlEncode(name, System.Text.Encoding.UTF8));
                HttpContext.Current.Response.BinaryWrite(bytes);
                HttpContext.Current.Response.Flush();
                //HttpContext.Current.Response.End(); 
            }
            catch (Exception ex)
            {
                //policyframework.common.logclass.Debug("=====CreateExcel 生成excel报错 =====" + e.Message);
                LogUtils.Error("出错:" + ex.Message, ex);
            } 
        }



        /// <summary>
        /// 相对路径
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public static DataTable NPOILoadExcel(string name)
        {
            FileStream fs = null;
            IWorkbook book;

            try
            {
                fs = File.OpenRead(name);

                if (name.IndexOf(".xlsx") > -1)
                {
                    book = new XSSFWorkbook(fs);
                }
                else if (name.IndexOf(".xls") > -1)
                {
                    book = new HSSFWorkbook(fs);
                }
                else
                {
                    book = null;
                }
            }
            catch
            {
                throw new Exception("导入文件错误");
            }
            finally
            {
                fs.Dispose();
                fs.Close();
            }

            if (book == null)
            {
                throw new Exception("导入文件格式错误");
            }

            ISheet sheet = book.GetSheetAt(0);

            if (sheet == null)
            {
                throw new Exception("报个数据不能为空");
            }

            IRow firstRow = sheet.GetRow(0);
            int cellCount = firstRow.Cells.Count;
            DataTable dt = new DataTable();
            ICell cell;
            IRow row;

            for (int i = 0; i < cellCount; i++)
            {
                cell = firstRow.GetCell(i);
                if (cell != null)
                {
                    string cellValue = cell.StringCellValue;
                    if (cellValue != null)
                    {
                        DataColumn column = new DataColumn(cellValue);
                        dt.Columns.Add(column);
                    }
                }
            }

            for (int i = 1; i <= sheet.LastRowNum; i++)
            {
                row = sheet.GetRow(i);
                DataRow dataRow = dt.NewRow();
                for (int j = 0; j < cellCount; j++)
                {
                    if (row.GetCell(j) == null)
                    {
                        continue;
                    }

                    dataRow[j] = row.GetCell(j).ToString();
                }
                dt.Rows.Add(dataRow);
            }

            return dt;
        }
    }
}
View Code