C#Excel导出,导入操作

1.我们在开发操作中,经常会用到Excel操作,其中包括,Excel导入,Excel导出,附件的上传,下载,包括Excel动态导入,我们这里就不讲,主要讲Excel导入,导出操作,而动态的操作,只需要在原来基础上做修改即可。需求图:

   

2.具体代码实现:

  A:Excel导出,其中会因为Excel版本的不同导致导出的成败效果不同,具体情况具体分析解决:

    

 1    #region//导出数据
 2     /// <summary>
 3     /// /导单
 4     /// </summary>
 5     /// <param name="sender"></param>
 6     /// <param name="e"></param>
 7     protected void BtExcelOut_Click1(object sender, EventArgs e)
 8     {
 9         DataTable dt = getDt();
10         if (dt == null || dt.Rows.Count == 0)
11         {
12             Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "", "<script>alert('没有内容!')</script>", false);
13             return;
14         }
15         CreateExcel(dt, "DSR已选中社群");
16     }
17     /// <summary>
18     /// 获取筛选数据
19     /// </summary>
20     /// <returns></returns>
21     public DataTable getDt()
22     {
23         SqlConnection conn = SqlHelperEx.ConnOpen("SPSDB");
24         DataTable dt = new DataTable();
25         string lists = Request["itemList"];
26         string[] ids = lists.Split(',');
27         if (ids.Length > 0 && lists != "")
28         {
29             string strlist = "";
30             for (int k = 0; k < ids.Length; k++)
31             {
32                 strlist += ids[k].ToString() + ",";
33             }
34             if (strlist != "" && strlist != null) strlist = strlist.Substring(0, strlist.Length - 1);
35             string strsql = "SELECT (CASE classID WHEN 1 THEN '论坛' WHEN 2 THEN '微信' WHEN 3 THEN '微博'  WHEN 4 THEN '朋友圈'  WHEN 5 THEN 'QQ群'  ELSE '其他' END)AS [类型] ,(CASE CategoryID WHEN 1 THEN '家具' WHEN 2 THEN '电商' WHEN 3 THEN 'SNS媒体' ELSE '其它' END) AS [分类] , SNSName AS [网站] ,accountID AS [板块],URL AS [链接], Area AS [地域], fans AS [粉丝(关注)数],IsTiop AS [置顶/天],highlight AS [加精/周], Stars AS [星级], LinkWay AS [直接联系方式],media AS [媒介],SNSContact AS [媒介联系方式] FROM   BaseSNSInfo WHERE IsValid=1 AND classID=1  AND ID  in (" + strlist + ")";
36             dt = SqlHelperEx.GetDataTable(strsql, conn);
37             SqlHelperEx.ConnClose(conn);
38         }
39         else
40         {
41             string strsql = "SELECT (CASE classID WHEN 1 THEN '论坛' WHEN 2 THEN '微信' WHEN 3 THEN '微博'  WHEN 4 THEN '朋友圈'  WHEN 5 THEN 'QQ群'  ELSE '其他' END)AS [类型] ,(CASE CategoryID WHEN 1 THEN '家具' WHEN 2 THEN '电商' WHEN 3 THEN 'SNS媒体' ELSE '其它' END) AS [分类] , SNSName AS [网站] ,accountID AS [板块],URL AS [链接], Area AS [地域], fans AS [粉丝(关注)数],IsTiop AS [置顶/天],highlight AS [加精/周], Stars AS [星级], LinkWay AS [直接联系方式],media AS [媒介],SNSContact AS [媒介联系方式] FROM   BaseSNSInfo WHERE IsValid=1 AND classID=1";
42             dt = SqlHelperEx.GetDataTable(strsql, conn);
43             SqlHelperEx.ConnClose(conn);
44         }
45         return dt;
46     }
47     //<summary>
48     //导出到EXcel
49     //</summary>
50     //<param name="dt"></param>
51     //<param name="FileName"></param>
52     public void CreateExcel(DataTable dt, string FileName)
53     {
54         Response.Clear();
55         Response.Charset = "GB2312";
56         Response.ContentEncoding = Encoding.Default;
57         Response.Buffer = true;
58         Response.AppendHeader("Content-Disposition", "attachment;filename=\"" + System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls\"");
59         Response.ContentType = "application/ms-excel";
60         string colHeaders = string.Empty;
61         string ls_item = string.Empty;
62         DataRow[] myRow = dt.Select();
63         int i = 0;
64         int cl = dt.Columns.Count;
65         for (int k = 0; k < dt.Columns.Count; k++)
66         {
67             if (k == (dt.Columns.Count - 1))
68             {
69                 colHeaders += dt.Columns[k].ToString() + "\n";
70             }
71             else
72             {
73                 colHeaders += dt.Columns[k].ToString() + "\t";
74             }
75         }
76         Response.Output.Write(colHeaders);
77         foreach (DataRow row in myRow)
78         {
79             for (i = 0; i < cl; i++)
80             {
81                 if (i == (cl - 1))
82                 {
83                     ls_item += row[i].ToString() + "\n";
84                 }
85                 else
86                 {
87                     ls_item += row[i].ToString() + "\t";
88                 }
89             }
90             Response.Output.Write(ls_item);
91             ls_item = string.Empty;
92         }
93         Response.Output.Flush();
94         Response.End();
95     }
96     #endregion

3.Excel导入功能,有动态的导入,同时Excel版本也有不同,也会导致导入效果,具体情况具体分析解决:

   

  1  #region 导入数据
  2 
  3     /// <summary>
  4     /// 导入
  5     /// </summary>
  6     /// <param name="sender"></param>
  7     /// <param name="e"></param>
  8     protected void btnImport_Click(object sender, EventArgs e)
  9     {
 10         string fileName = UpLoadTxt.FileName;//获取要导入的文件名  
 11         if (fileName == null || fileName == "")
 12         {
 13             Response.Write("<script>alert('没有要导入的文件,请选中文件后再操作!');window.location.href='SNSbbsList.aspx';</script>");
 14         }
 15         else
 16         {
 17             string savePath = Server.MapPath("~/UploadFiles/ChatLog/");
 18             DateTime dtnow = System.DateTime.Now;
 19             string filename = dtnow.Year.ToString() + dtnow.Month.ToString() + dtnow.Day.ToString() + dtnow.Hour.ToString() + dtnow.Minute.ToString() + dtnow.Second.ToString() + dtnow.Millisecond.ToString();
 20             string ExtName = getFileExt(fileName).ToUpper();
 21             if (IsConform(ExtName) == false)
 22             {
 23                 Response.Write("<script>alert('上传的文件类型不是Excel文件,请核实后再上传!');window.location.href='SNSbbsList.aspx';</script>");
 24             }
 25             else
 26             {
 27                 filename += "." + ExtName;
 28                 FileOperatpr(filename, savePath);
 29                 string url = savePath + filename;
 30                 UpLoadTxt.SaveAs(url);
 31                 SqlConnection conn = SqlHelperEx.ConnOpen("SPSDB");
 32                 Method(conn, url);
 33                 SqlHelperEx.ConnClose(conn);
 34             }
 35         }
 36     }
 37 
 38 
 39     #region 辅助功能
 40 
 41     private string getFileExt(string fileName)//获取上传文件的后缀名
 42     {
 43         if (fileName.IndexOf(".") == -1)
 44             return "";
 45         string[] temp = fileName.Split('.');
 46         return temp[temp.Length - 1].ToLower();
 47     }
 48 
 49     private bool IsConform(string _extname)//判断文件类型是否符合
 50     {
 51         bool flag = false;
 52         if (_extname.ToLower() == "xls" || _extname.ToLower() == "xlsx")
 53         {
 54             flag = true;
 55         }
 56         return flag;
 57     }
 58 
 59     private void FileOperatpr(string fileName, string savePath)
 60     {
 61         if (!Directory.Exists(savePath))
 62         {
 63             Directory.CreateDirectory(savePath);
 64         }
 65         if (File.Exists(savePath + fileName))
 66         {
 67             File.Delete(savePath + fileName);
 68         }
 69     }
 70 
 71     #endregion
 72 
 73     protected void Method(SqlConnection conn, string url)
 74     {
 75         string istrue = "0";
 76         DataTable dt = new DataTable();
 77         dt = FromExcelToDataTable(url);
 78         if (dt.Rows.Count > 0)
 79         {
 80             try
 81             {
 82                 istrue = BulkCopy(conn, dt);
 83             }
 84             catch (Exception ex)
 85             {
 86                 istrue = "0";
 87             }
 88             if (istrue != "0")
 89             {
 90                 if (istrue != "" && istrue != "1")
 91                 {
 92                     Response.Write("<script>alert('网站为" + istrue + "出现了重复,请核实后再次操作!');window.location.href='SNSbbsList.aspx';</script>");
 93                 }
 94                 if (istrue == "1")
 95                 {
 96                     Response.Write("<script>alert('导入成功!');window.location.href='SNSbbsList.aspx';</script>");
 97                 }
 98             }
 99             else
100             {
101                 Response.Write("<script>alert('导入失败,请重新查看文件后再上传!');window.location.href='SNSbbsList.aspx';</script>");
102             }
103         }
104         else
105         {
106             Response.Write("<script>alert('导入的文件中没有数据或者格式不正确,请核实文件!');window.location.href='SNSbbsList.aspx';</script>");
107         }
108     }
109 
110 
111     protected DataTable FromExcelToDataTable(string physicalPath)
112     {
113         string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + physicalPath + ";Extended Properties='Excel 8.0;HDR=yes ;IMEX=1'";
114         //  Excel 2007
115         if (physicalPath.ToLower().IndexOf(".xlsx") > 0 && physicalPath.ToLower().EndsWith("xlsx"))
116         {
117             strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + physicalPath + "';Extended Properties='Excel 8.0;HDR=yes;IMEX=1'";
118         }
119         //  Excel 2003
120         if (physicalPath.ToLower().IndexOf(".xls") > 0 && physicalPath.ToLower().EndsWith("xls"))
121         {
122             strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=YES;';Data Source='" + physicalPath + "'";
123         }
124         DataTable dt = new DataTable();
125 
126         OleDbConnection conn = new OleDbConnection(strConn);
127         try
128         {
129             if (conn.State.ToString() == "Closed")
130             {
131                 conn.Open();
132             }
133             DataTable dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
134             for (int i = 0; i < dtSheet.Rows.Count; i++)
135             {
136                 DataSet dst = new DataSet();
137                 dst.Clear();
138                 string strSheetName = dtSheet.Rows[i]["TABLE_NAME"].ToString();
139                 OleDbDataAdapter OleDa = new OleDbDataAdapter("select * from [" + strSheetName + "]", conn);
140                 OleDa.Fill(dst, "TableName");
141                 DataTable dtnew = dst.Tables[0];
142 
143                 dt.Columns.Add("classID", typeof(string));
144                 dt.Columns.Add("CategoryID", typeof(string));
145                 dt.Columns.Add("SNSName", typeof(string));
146                 dt.Columns.Add("accountID", typeof(string));
147                 dt.Columns.Add("URL", typeof(string));
148                 dt.Columns.Add("Area", typeof(string));
149                 dt.Columns.Add("fans", typeof(string));
150                 dt.Columns.Add("IsTiop", typeof(string));
151                 dt.Columns.Add("highlight", typeof(string));
152                 dt.Columns.Add("Stars", typeof(string));
153                 dt.Columns.Add("LinkWay", typeof(string));
154                 dt.Columns.Add("media", typeof(string));
155                 dt.Columns.Add("SNSContact", typeof(string));
156 
157 
158                 if (dtnew.Rows.Count > 0)
159                 {
160                     #region 匹配
161                     if (dtnew.Columns.Count >= 13)
162                     {
163                         for (int j = 0; j < dtnew.Rows.Count; j++)
164                         {
165                             DataRow row = dt.NewRow();
166                             try
167                             {
168                                 row["classID"] = dtnew.Rows[j]["类型"].ToString();
169                                 row["CategoryID"] =dtnew.Rows[j]["分类"].ToString();
170                                 row["SNSName"] = dtnew.Rows[j]["网站"].ToString();
171                                 row["accountID"] = dtnew.Rows[j]["板块"].ToString();
172                                 row["URL"] = dtnew.Rows[j]["链接"].ToString();
173                                 row["Area"] = dtnew.Rows[j]["地域"].ToString();
174                                 row["fans"] = ConvertDigit(dtnew.Rows[j]["粉丝(关注)数"].ToString());
175                                 row["IsTiop"] = dtnew.Rows[j]["置顶/天"].ToString();
176                                 row["highlight"] = dtnew.Rows[j]["加精/周"].ToString();
177                                 row["Stars"] = ConvertDigit(dtnew.Rows[j]["星级"].ToString());
178                                 row["LinkWay"] = dtnew.Rows[j]["直接联系方式"].ToString();
179                                 row["media"] = dtnew.Rows[j]["媒介"].ToString();
180                                 row["SNSContact"] = dtnew.Rows[j]["媒介联系方式"].ToString();
181 
182                             }
183                             catch (Exception)
184                             {
185                                 row = null;
186                             }
187                             if (row != null)
188                             {
189                                 dt.Rows.Add(row);
190                             }
191                         }
192                     }
193                     #endregion
194 
195                 }
196             }
197 
198 
199             conn.Close();
200         }
201         catch (Exception ex)
202         {
203             dt = null;
204         }
205         return dt;
206     }
207 
208 
209     #region 数据转换
210 
211 
212     protected float ConvertFloat(string numerator, string denominator)
213     {
214         float flag = 0F;
215         try
216         {
217             float _numer = ConvertFloat(numerator);
218             int _denom = ConvertDigit(denominator);//判断分母是否为0
219             if (_denom != 0)
220             {
221                 flag = _numer / _denom;
222             }
223         }
224         catch (Exception ex)
225         {
226             flag = 0F;
227         }
228         return flag;
229     }
230 
231 
232     protected float ConvertFloat(string str)
233     {
234         float flag = 0F;
235         try
236         {
237             flag = float.Parse(str);
238         }
239         catch (Exception ex)
240         {
241             flag = 0F;
242         }
243 
244         return flag;
245 
246     }
247 
248 
249 
250 
251 
252 
253     /// <summary>
254     /// 转化为金融类型(默认为0)
255     /// </summary>
256     /// <param name="str">代转化的字符串</param>
257     /// <returns></returns>
258     protected decimal ConvertDecimal(string str)
259     {
260         decimal flag = 0;
261         try
262         {
263             flag = Convert.ToDecimal(str);
264         }
265         catch (Exception ex)
266         {
267             flag = 0;
268         }
269         return flag;
270     }
271 
272     /// <summary>
273     /// 字符串类型转化成数字(转化失败时默认为0)
274     /// </summary>
275     /// <param name="str">代转化的字符串</param>
276     /// <returns>转化后的数字</returns>
277     protected int ConvertDigit(string str)
278     {
279         int flag = 0;
280         try
281         {
282             flag = Convert.ToInt32(str);
283         }
284         catch (Exception ex)
285         {
286             flag = 0;
287         }
288         return flag;
289     }
290 
291     #endregion
292 
293 
294     protected string BulkCopy(SqlConnection conn, DataTable dt)
295     {
296         string StrAgaionstraccount = "";
297         string CalssID = "";
298         string CategoryID = "";
299         if (dt != null && dt.Rows.Count > 0)
300         {
301             string sqlsnsname = "SELECT *,SNSName FROM  BaseSNSInfo WHERE IsValid=1 and classID=1  ORDER BY id DESC";
302             DataTable dtSNS = SqlHelper.GetDataTable(sqlsnsname, conn);
303             string sqllt = "SELECT * FROM BaseSNSClass WHERE IsValid=1 and id=1 or Name LIKE '%论坛%' ";
304             DataTable dtlt = SqlHelperEx.GetDataTable(sqllt, conn);
305             ///类型和分类
306             string sqlGetCates = "SELECT *,DictID,DictName FROM BaseCategoryName WHERE  IsValid=1  AND DictType='CategoryID'";
307             DataTable dtGetCate = SqlHelperEx.GetDataTable(sqlGetCates, conn);
308             for (int k = 0; k < dt.Rows.Count; k++)
309             {
310                 CalssID = dt.Rows[k]["classID"].ToString();
311 
312                 if (dt.Rows.Count > 0)
313                 {
314                     for (int i = 0; i < dtlt.Rows.Count; i++)
315                     {
316                         if (dtlt.Rows[i]["Name"].ToString() == CalssID)
317                         {
318                             CalssID = dtlt.Rows[i]["ID"].ToString();
319                             break;
320                         }
321                     }
322                 }
323                 CategoryID = dt.Rows[k]["CategoryID"].ToString();
324                 if (dtGetCate.Rows.Count > 0)
325                 {
326                     for (int j = 0; j < dtGetCate.Rows.Count; j++)
327                     {
328                         if (dtGetCate.Rows[j]["DictName"].ToString() == CategoryID)
329                         {
330                             CategoryID = dtGetCate.Rows[j]["DictID"].ToString();
331                             break;
332                         }
333                     }
334                 }
335 
336                 string CreateLoginId = Session["UserName"].ToString();
337                 string straccount = dt.Rows[k]["SNSName"].ToString();
338                 int g = 0;
339                 if (dtSNS.Rows.Count > 0)
340                 {
341 
342                     for (; g < dtSNS.Rows.Count; g++)
343                     {
344                         if (dtSNS.Rows[g]["SNSName"].ToString() == straccount)
345                         {
346                             StrAgaionstraccount += straccount + ",";
347                             break;
348                         }
349                     }
350                 }
351                 if (g == dtSNS.Rows.Count)
352                 {
353                     StringBuilder strSql = new StringBuilder();
354                     // 生成SQL语句;
355                     strSql.AppendFormat("INSERT INTO BaseSNSInfo(classID,CategoryID,SNSName,accountID,URL,Area,fans,IsTiop,highlight,Stars,media,SNSContact,LinkWay,CreateUserId)  values(  {0}", Environment.NewLine);
356                     strSql.AppendFormat(" @classID,@CategoryID,@SNSName,@accountID,@URL,@Area,@fans,@IsTiop,@highlight,@Stars,@media,@SNSContact,@LinkWay,@CreateUserId) {0}", Environment.NewLine);
357                     SqlParameter[] parameters = {
358                                     new SqlParameter("@classID", CalssID),
359                                     new SqlParameter("@CategoryID", CategoryID ),
360                                     new SqlParameter("@SNSName",  straccount),
361                                     new SqlParameter("@accountID",  dt.Rows[k]["accountID"].ToString()),
362                                     new SqlParameter("@URL",  dt.Rows[k]["URL"].ToString()),
363                                     new SqlParameter("@Area",  dt.Rows[k]["Area"].ToString()),
364                                     new SqlParameter("@fans",  dt.Rows[k]["fans"].ToString()),
365                                     new SqlParameter("@IsTiop",  dt.Rows[k]["IsTiop"].ToString()),
366                                     new SqlParameter("@highlight",  dt.Rows[k]["highlight"].ToString()),
367                                     new SqlParameter("@Stars",  dt.Rows[k]["Stars"].ToString()),
368                                     new SqlParameter("@media",  dt.Rows[k]["media"].ToString()),
369                                     new SqlParameter("@SNSContact",  dt.Rows[k]["SNSContact"].ToString()),
370                                     new SqlParameter("@LinkWay",  dt.Rows[k]["LinkWay"].ToString()),
371                                     new SqlParameter("@CreateUserId", CreateLoginId),
372                                     };
373                     // 执行
374                     int results = SqlHelperEx.ExecuteNonQuery(strSql.ToString(), conn, parameters);
375                     // 返回
376                     if (results == 1)
377                     {
378                         StrAgaionstraccount = "1";
379                     }
380                     else
381                     {
382                         StrAgaionstraccount = "0";
383                     }
384                 }
385             }
386         }
387         return StrAgaionstraccount;
388     }
389     #endregion

 

转载于:https://www.cnblogs.com/hulxm/articles/4935563.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值