C# 读取Excel CSV 类型文件到DataSet中,反之从DataSet写入excel
/// <summary> /// 设置文件保存位置, /// </summary> /// <returns>返回文件路径</returns> private string GetFilePath() { string FilePath = string.Empty;OpenFileDialog openFileDialog1 = new OpenFileDialog();//设置文件类型 |*.txt|All files(*.*)|*.* openFileDialog1.Filter = "xls|*.xls|xlsx|*.xlsx|csv|*.csv|All files(*.*)|*.*"; openFileDialog1.DefaultExt = ".xls";//设置默认文件类型显示顺序 openFileDialog1.FilterIndex = 2;//保存对话框是否记忆上次打开的目录 openFileDialog1.RestoreDirectory = true;//点了保存按钮进入 if (openFileDialog1.ShowDialog() == DialogResult.OK) { //获得文件路径 FilePath = openFileDialog1.FileName.ToString();//获取文件名,不带路径 //fileNameExt = localFilePath.Substring(localFilePath.LastIndexOf("\\") + 1);//获取文件路径,不带文件名 // FilePath1 = localFilePath.Substring(0, localFilePath.LastIndexOf("\\"));//给文件名前加上时间 //newFileName = DateTime.Now.ToString("yyyyMMdd") + fileNameExt;//在文件名里加字符 //saveFileDialog1.FileName.Insert(1,"dameng");// System.IO.FileStream fs = (System.IO.FileStream)saveFileDialog1.OpenFile();//输出文件//fs输出带文字或图片的文件,就看需求了 }return FilePath; }///数据返回到DataSetinternal DataSet ToDataSet(string filePath) {string fileType = System.IO.Path.GetExtension(filePath); if (string.IsNullOrEmpty(fileType)) return null;if (fileType.ToLower() == ".xls") { connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filePath + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\""; } else if (fileType.ToLower() == ".xlsx") { connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1;\""; } else if (fileType.ToLower() == ".csv") { connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath.Remove(filePath.LastIndexOf("\\") + 1) + ";Extended Properties='Text;FMT=Delimited;HDR=YES;'"; } else { MessageBox.Show("文件格式不不符合要求,此系统只支持导入xls,xlsx,csv 三种格式,详情咨询软件供应商"); } string sql_F = "Select * FROM [{0}]";OleDbConnection conn = new OleDbConnection (); OleDbDataAdapter da = null; DataTable dtSheetName = null;DataSet ds = new DataSet(); try { conn.ConnectionString=connStr; conn.Open(); string SheetName = ""; dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });da = new OleDbDataAdapter(); for (int i = 0; i < dtSheetName.Rows.Count; i++) { SheetName = Convert.ToString(dtSheetName.Rows[i]["TABLE_NAME"]);if (SheetName.Contains("$") && !SheetName.Replace("'", "").EndsWith("$")) { continue; } da.SelectCommand = new OleDbCommand(String.Format(sql_F, SheetName), conn); DataSet dsItem = new DataSet(); da.Fill(ds, "Mdt1"); DataTable table = ds.Tables["Mdt1"]; DataRow row = table.NewRow(); da.Update(ds, "Mdt1"); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } finally { // 关闭连接 if (conn.State == ConnectionState.Open) { conn.Close(); da.Dispose(); conn.Dispose(); } } return ds; }
OleDb 写入Excel模块
还要注意此连接字符串
Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + Path + ";Extended Properties=Excel 8.0"
没有后面那些属性,否则就要报出错误“操作必须使用一个可更新的查询。”
其实就是修改读取到的(excel所指向)Dataset。显示的替换为我们外来的dataset。
public static void DSToExcel(string Path,DataSet oldds) { //先得到汇总EXCEL的DataSet 主要目的是获得EXCEL在DataSet中的结构 string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + Path + ";Extended Properties=Excel 8.0"; OleDbConnection myConn = new OleDbConnection(strCon) ; string strCom="select * from [Sheet0$]"; myConn.Open ( ) ; OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom, myConn ) ; System.Data.OleDb.OleDbCommandBuilder builder=new OleDbCommandBuilder(myCommand); //QuotePrefix和QuoteSuffix主要是对builder生成InsertComment命令时使用。 builder.QuotePrefix="["; //获取insert语句中保留字符(起始位置) builder.QuoteSuffix="]"; //获取insert语句中保留字符(结束位置) DataSet newds=new DataSet(); myCommand.Fill(newds ,"Table1") ; for(int i=0;i<oldds.Tables[0].Rows.Count;i++) { //在这里不能使用ImportRow方法将一行导入到news中,因为ImportRow将保留原来DataRow的所有设置(DataRowState状态不变)。//在使用ImportRow后newds内有值,但不能更新到Excel中因为所有导入行的DataRowState!=Added DataRow nrow = newds.Tables["Table1"].NewRow(); for(int j=0;j<newds.Tables[0].Columns.Count;j++) { nrow[j]=oldds.Tables[0].Rows[i][j]; } newds.Tables["Table1"].Rows.Add(nrow); } myCommand.Update(newds,"Table1"); myConn.Close(); }
转载于:https://www.cnblogs.com/tanhu/p/7008589.html
C# 读取Excel CSV 类型文件到DataSet中,反之从DataSet写入excel相关推荐
- linux下循环读取目录文件,linux循环递归读取目录指定类型文件及计算阶乘脚本...
linux循环读取目录指定类型文件脚本 ergodic.sh #!/bin/bash function ergodic { for file in ` ls $1` do if [ -d $1&quo ...
- 05pandas读取excel csv txt文件
pandas丨数据读取与保存 读取excel文件: pandas.read_excel() 保存excel文件: pandas.to_excel() pandas.read_excel(io, she ...
- spark进行数据清洗时,如何读取xlsx表格类型文件
首先可以确定的是spark有专门对应excel表格读取的工具,在用spark-sql对xlsx类型文件进行读取的时候只需要再pom.xml文件里添加依赖就可以了 添加依赖如下 <!-- 读取ex ...
- 关于 pandas 解析 json 文件和其他类型文件的结果中日期格式数据类型不一致的问题
问题: 我有两个文件,一个 .csv 文件和一个 .json 文件,数据截图分别如下: 我的目的是解析这些文件,并将结果统一交由下一个程序块进行处理. 在了解到 pandas 可以解析数据文件(csv ...
- 使用python批量提取txt中的数据并写入excel
本人是编程小白,同时也是一名准毕业研究生,在处理众多数据时总是要花很多时间来做重复的工作以提取出需要的数据,让我十分头疼.我无法忍受这种低效的工作,于是便开始尝试使用Python进行编程来批量处理数据 ...
- excel 单元格如何获取textbox中的值 java,把excel表格数据定义为文本框-excel中如何将单元格里的数值显示在文本框(textbox)里...
excel中如何将单元格里的数值显示在文本框(textbox)里 sheets("Sheet2").range("b3")=textbox ---------- ...
- Python编程之读取Excel csv格式文件内容
1.读取csv文件,返回list数据结构 注意:csv文件中不应该出现合并行的数据,否则读取为空值 test.csv文件为:可以自己定义 2.程序部分 import sys import csv de ...
- html制作表格保存为txt文件,可将HTML表格导出为Excel|csv|txt文件的jQuery插件
TableExport是一款可以将HTML表格导出为Excel xlsx格式.xls格式,以及csv和txt文件的jQuery插件.TableExport插件使用简单,默认使用Bootstrap的CS ...
- html导出表格为csv,可将HTML表格导出为Excel|csv|txt文件的jQuery插件
TableExport是一款可以将HTML表格导出为Excel xlsx格式.xls格式,以及csv和txt文件的jQuery插件.TableExport插件使用简单,默认使用Bootstrap的CS ...
最新文章
- 深度学习背后的基础-神经网络揭秘
- 七年磨一剑:Apache HBase 1.0正式发布
- Android studio使用心得(二)— 打包签名apk发布
- Adobe CTO:Android将超预期获50%份额
- 从包中导入类的使用 java
- [转] 彻底了解指针数组,数组指针,以及函数指针,以及堆中的分配规则
- virtual box中安装Mac OS后设置分辨率
- Linux_异常_03_Failed to restart iptables.service: Unit not found.
- OpenResty缓存
- 费尔个人防火墙采用两种封包过滤技术
- 云课堂智慧职教网页版登录入口_云课堂智慧职教网页版
- 以太坊实战之《如何正确处理nonce》
- 自定义控件-视觉特效
- Vue2竖向文字滚动
- 重磅!大数据《实战全栈工程师成长手册》,附 PDF PPT 下载
- 基于CNN 对车牌数字进行识别,(二)
- 多核与多个CPU啥区别
- c语言设计一个程序:计算圆周率,精确到小数点后8位数
- 2.4G和5.8G的无线区别
- Java高性能系列-(一)VM生命周期
热门文章
- 微信内打开的网页不能下载APP,微信无法打开浏览器访问指定页面的解决方案...
- 【网络流】 HDU 4309 Seikimatsu Occult Tonneru 状压枚举边
- Sql Server和oracle的函数区别总结
- Struts2的ValueStack(值栈)介绍
- Springboot环境下mybatis配置多数据源配置
- 为啥用mencoder执行格式转换不退出_kindle|什么?calibre还能这么用?
- springboot面试
- 只收藏不点赞的人是什么心理???
- Signal和Slot是同步的还是异步的
- ssm数据库异常问题