C#读取Excel以及将数据导入至Excel

Stella981
• 阅读 535

一,读取Excel文件内容:

 1 //根据excle的路径把第一个sheel中的内容放入datatable  
 2     public static DataTable ReadExcelToTable()//excel存放的路径  
 3     {  
 4         //连接字符串  
 5         string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + "E:/Peng.Tao/TEST/1.xlsx" + ";Extended Properties='Excel8.0;HDR=NO;IMEX=1';"; // Office 07及以上版本 不能出现多余的空格 而且分号注意  
 6         //string connstring = Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; //Office 07以下版本   
 7         using (OleDbConnection conn = new OleDbConnection(connstring))  
 8         {  
 9             conn.Open();  
10             DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //得到所有sheet的名字  
11             string firstSheetName = sheetsName.Rows[0][2].ToString(); //得到第一个sheet的名字  
12             string sql = string.Format("SELECT * FROM [{0}]", firstSheetName); //查询字符串  
13             //string sql = string.Format("SELECT * FROM [{0}] WHERE [日期] is not null", firstSheetName); //查询字符串  
14             OleDbDataAdapter ada = new OleDbDataAdapter(sql, connstring);  
15             DataSet set = new DataSet();  
16             ada.Fill(set);  
17             return set.Tables[0];  
18         }  
19     }

二,将数据导入至Excel:

 1 protected void Excel1_Click(object sender, EventArgs e) {  
 2         //设置保存的文档类型  
 3         //Response.ContentType = "application/ms-word";//保存为Word类型    
 4         Response.ContentType = "application/ms-excel";//保存为Excel类型  
 5         //设置编码方式和内容保存的形式  
 6         Response.ContentEncoding = System.Text.Encoding.UTF8;  
 7         Response.Charset = "Excel文档";  
 8         //设置保存为的文件名  
 9         string dateStr = DateTime.Now.ToString("yyyyMMddHHmmss");  
10         string fileName = System.Web.HttpUtility.UrlEncode("料号文件" + dateStr, System.Text.Encoding.UTF8);  
11         Response.AppendHeader("content-disposition", "attachment;filename=\"" + fileName + ".xls\"");  
12         //开始导出;  
13         this.EnableViewState = false;  
14         StringWriter oStringWriter = new StringWriter();  
15         HtmlTextWriter oHtmlTextWriter = new HtmlTextWriter(oStringWriter);  
16         GridView1.RenderControl(oHtmlTextWriter);  
17         Response.Write(oStringWriter.ToString());  
18         oStringWriter = new StringWriter();  
19         oHtmlTextWriter = new HtmlTextWriter(oStringWriter);  
20         GridView1.RenderControl(oHtmlTextWriter);  
21         Response.Write(oStringWriter.ToString());  
22         Response.End();     
23     }  
24     //添加以下函数防止出现:“Gridview控件需在Runat=server中”  的异常  
25     public override void VerifyRenderingInServerForm(Control control)  
26     {  
27         //base.VerifyRenderingInServerForm(control);  
28     }

三,WinForm将DataGridView数据导出至EXCEL

 1 private void button2_Click(object sender, EventArgs e)  
 2         {  
 3             ToExcel();              
 4         }  
 5         public void ToExcel()  
 6         {  
 7             try  
 8             {  
 9                 //没有数据的话就不往下执行    
10                 if (dataGridView1.Rows.Count == 0)  
11                     return;  
12                 //实例化一个Excel.Application对象    
13                 Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();  
14                 //让后台执行设置为不可见,为true的话会看到打开一个Excel,然后数据在往里写    
15                 excel.Visible = true;  
16                 //新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错    
17                 excel.Application.Workbooks.Add(true);  
18                 //生成Excel中列头名称    
19                 for (int i = 0; i < dataGridView1.Columns.Count; i++)  
20                 {  
21                     if (this.dataGridView1.Columns[i].Visible == true)  
22                     {  
23                         excel.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;  
24                     }  
25   
26                 }  
27                 //把DataGridView当前页的数据保存在Excel中    
28                 for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)  
29                 {  
30                     System.Windows.Forms.Application.DoEvents();  
31                     for (int j = 0; j < dataGridView1.Columns.Count; j++)  
32                     {  
33                         if (this.dataGridView1.Columns[j].Visible == true)  
34                         {  
35                             if (dataGridView1[j, i].ValueType == typeof(string))  
36                             {  
37                                 excel.Cells[i + 2, j + 1] = "'" + dataGridView1[j, i].Value.ToString();  
38                             }  
39                             else  
40                             {  
41                                 excel.Cells[i + 2, j + 1] = dataGridView1[j, i].Value.ToString();  
42                             }  
43                         }  
44   
45                     }  
46                 }  
47                 //设置禁止弹出保存和覆盖的询问提示框    
48                 excel.DisplayAlerts = false;  
49                 excel.AlertBeforeOverwriting = false;  
50                 //保存工作簿    
51                 excel.Application.Workbooks.Add(true).Save();  
52                 //保存excel文件    
53                 excel.Save("E:\\Peng.Tao\\Winform\\MyFirstWinform" + "\\Data.xls");  
54                 //确保Excel进程关闭    
55                 excel.Quit();  
56                 excel = null;  
57                 GC.Collect();//如果不使用这条语句会导致excel进程无法正常退出,使用后正常退出  
58                 MessageBox.Show(this, "文件已经成功导出!", "信息提示");  
59             }  
60             catch (Exception ex)  
61             {  
62                 MessageBox.Show(ex.Message, "错误提示");  
63             }  
64         }
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
PHP导入导出EXCELl,CSV
PHP导入导出Excel,CSVHTML<formaction"{:U('Admin/Unit/importcsv')}"method"post"name"myform"id"myform"enctype"multipart/formdata"<input
Stella981 Stella981
2年前
Excel数据转化为sql脚本
在实际项目开发中,有时会遇到客户让我们把大量Excel数据导入数据库的情况。这时我们就可以通过将Excel数据转化为sql脚本来批量导入数据库。1在数据前插入一列单元格,用来拼写sql语句。 具体写法:"insertintot\_student(id,name,age,class)value("&B2&",'"&C2&"',"&D2&"
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
2年前
Unittest框架+ddt数据驱动+HTMLTestRunner+sendmail(自动发送测试报告)+git+Jenkins
本次写的是针对有代码基础的,没基础建议先去学基础,以下所有描述内容都是我已经在公司项目实践成功的!仅供参考整体思路:1、接口自动化用的是Python中unittest框架2、所有的测试数据用例存放Excel表3、封装一套读取和写入的Excel方法4、重写request方法(为了从Excel读取数据后对数据作分析和判断并在测
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这