Csv-DataTable-Excel格式的相互转换附StopWathch
2015-11-13 14:25
274 查看
Csv文件
百度问答中搜到的:所谓“CSV”,是Comma Separated Value(逗号分隔值)的英文缩写,通常都是纯文本文件。出现在档案总管中的档案类型是「逗号分格」,依计算机原来的设定,如果直接点选该档案,计算机将以EXCEL的模式开启该档案。但建议您千万不要这么做,因为CSV档如果以EXCEL开启,由于计算机档案数据转换的原因,会将其CRC之数值改做科学记号方式储存,而造成档案中的 CRC值发生错误。这也是笔者初出茅庐时所得到的惨痛经验,但如果想一窥CSV档的真实面貌,笔者建议您使用WORDPAD或是记事本(NOTE)来开启,再则先另存新档后用EXCEL开启,也是方法之一。开启后的CSV档包含了四或五个字段(部分),由左至右分别记载着:文件名称(XXXX.JPG)、档案大小(以BYTE为单位)、CRC32值(八个英文字母或数字组成)、档案路径(档案储存的子目录名称)和档案内容描述(一般来说都是明星的英文姓名甚或是专辑名称,也可能空白)。而其中第四栏「档案路径」因为每个人储存整理图档的方式不同,所以本栏通常不存在,而一般有含有「档案路径」这栏的CSV档,又称为ECSV档案.
在Office中,微软官方给他的格式名称:Microsoft Excel 逗号分隔值文件 (.csv)
[b]***************************************************[/b]分割线[b]*************************************************[/b]
一个Wince项目使用涉及了到3者之间的相互转换,并且有些转换时为了避免Excel中默认的科学计数法,特地在前面加上单引号.会特地说明.共引用两项COM引用
读取Cvs文件至DataTable,使用方式为Microsoft Text Driver查询
命名空间:Using System.Data.Odbc
[b]***************************************************[/b]分割线[b]*************************************************[/b]
将DataTable转换为Excel文件-运行速度较快.6W条数据的去重加单引号重新生成大概时间为20秒.配置较差的电脑
[b]***************************************************[/b]分割线[b]*************************************************[/b]
比对两个DataTable中数据,s1已盘点,s2位已盘点,并且都加上单引号
[b]***************************************************[/b]分割线[b]*************************************************[/b]
根据DataTable生成CSv文件,主要使用方法StreamWriter
[b]***************************************************[/b]分割线[b]*************************************************[/b]
删除DataTable中某一列数据重复的行,并加上单引号.输出DataTable
[b]***************************************************[/b]分割线[b]*************************************************[/b]
StopWathch
官方注解:提供一组方法和属性,可用于准确的测量运行时间
命名空间:using System.Diagnostics;
普通公共类,使用New创建
常用方法:
sw.Start();
官方注解:开始或继续测量某个时间间隔的运行时间
sw.Stop();
官方注解:停止测量某个时间间隔的运行时间
sw.E;apsed.ToString()
获取当前实例测量得出的总运行时间
百度问答中搜到的:所谓“CSV”,是Comma Separated Value(逗号分隔值)的英文缩写,通常都是纯文本文件。出现在档案总管中的档案类型是「逗号分格」,依计算机原来的设定,如果直接点选该档案,计算机将以EXCEL的模式开启该档案。但建议您千万不要这么做,因为CSV档如果以EXCEL开启,由于计算机档案数据转换的原因,会将其CRC之数值改做科学记号方式储存,而造成档案中的 CRC值发生错误。这也是笔者初出茅庐时所得到的惨痛经验,但如果想一窥CSV档的真实面貌,笔者建议您使用WORDPAD或是记事本(NOTE)来开启,再则先另存新档后用EXCEL开启,也是方法之一。开启后的CSV档包含了四或五个字段(部分),由左至右分别记载着:文件名称(XXXX.JPG)、档案大小(以BYTE为单位)、CRC32值(八个英文字母或数字组成)、档案路径(档案储存的子目录名称)和档案内容描述(一般来说都是明星的英文姓名甚或是专辑名称,也可能空白)。而其中第四栏「档案路径」因为每个人储存整理图档的方式不同,所以本栏通常不存在,而一般有含有「档案路径」这栏的CSV档,又称为ECSV档案.
在Office中,微软官方给他的格式名称:Microsoft Excel 逗号分隔值文件 (.csv)
[b]***************************************************[/b]分割线[b]*************************************************[/b]
一个Wince项目使用涉及了到3者之间的相互转换,并且有些转换时为了避免Excel中默认的科学计数法,特地在前面加上单引号.会特地说明.共引用两项COM引用
读取Cvs文件至DataTable,使用方式为Microsoft Text Driver查询
命名空间:Using System.Data.Odbc
string path = filePath + "\\" + fileName + ".csv"; string connString = @"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + filePath + ";Extensions=asc,csv,tab,txt"; try { using (OdbcConnection odbcConn = new OdbcConnection(connString)) { odbcConn.Open(); OdbcCommand oleComm = new OdbcCommand(); oleComm.Connection = odbcConn; oleComm.CommandText = "select * from [" + fileName + "#csv]"; OdbcDataAdapter adapter = new OdbcDataAdapter(oleComm); DataSet ds = new DataSet(); adapter.Fill(ds, fileName); odbcConn.Close(); return ds.Tables[0]; } } catch (Exception ex) { throw ex; } }
[b]***************************************************[/b]分割线[b]*************************************************[/b]
将DataTable转换为Excel文件-运行速度较快.6W条数据的去重加单引号重新生成大概时间为20秒.配置较差的电脑
public static bool DoExport(System.Data.DataTable dt, string fullPath) { //创建excel文件程序实例 Microsoft.Office.Interop.Excel.Application excelApp = new ApplicationClass(); if (excelApp == null) { throw new Exception("Excel无法启动"); } //在这里设置Excel文件的可见性 excelApp.Visible = false; //这块是申明工作簿 Workbooks wbs = excelApp.Workbooks; Workbook wb = wbs.Add(Missing.Value); Worksheet ws = (Worksheet)wb.Worksheets[1]; int cnt = dt.Rows.Count; int columncnt = dt.Columns.Count; // *****************获取数据******************** object[,] objData = new Object[cnt + 1, columncnt]; // 创建缓存数据 // c8c4 设置列标题 for (int i = 0; i < columncnt; i++) { objData[0, i] = dt.Columns[i].ColumnName; } // 设置具体数据 for (int i = 0; i < cnt; i++) { //DataRow表示DataTable中的一行数据 System.Data.DataRow dr = dt.Rows[i]; for (int j = 0; j < columncnt; j++) { objData[i + 1, j] = dr[j]; } } //********************* 写入Excel****************** Range r = ws.get_Range(excelApp.Cells[1, 1], excelApp.Cells[cnt + 1, columncnt]); r.NumberFormat = "@"; r.Value2 = objData; r.EntireColumn.AutoFit(); //设置禁止弹出保存和覆盖提示 excelApp.DisplayAlerts = false; excelApp.AlertBeforeOverwriting = false; excelApp.Application.Workbooks.Add(true).Save(); //设置单元格保护,123456为密码 ws.Protect("123456", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); //保存excel文件 ws.SaveAs(fullPath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); //确保Excel进程关闭 excelApp.Quit(); excelApp = null; return true; }
[b]***************************************************[/b]分割线[b]*************************************************[/b]
比对两个DataTable中数据,s1已盘点,s2位已盘点,并且都加上单引号
private static System.Data.DataTable GetNotChecked(System.Data.DataTable s1, System.Data.DataTable s2) { for (int i = 0; i < s2.Rows.Count; i++) { for (int j = 0; j < s1.Rows.Count; j++) { if (s1.Rows[j][0].Equals(s2.Rows[i][0])) { s1.Rows.RemoveAt(j); } if (i == s2.Rows.Count - 1) { s1.Rows[j][0] = "'" + s1.Rows[j][0].ToString(); } } } return s1; }
[b]***************************************************[/b]分割线[b]*************************************************[/b]
根据DataTable生成CSv文件,主要使用方法StreamWriter
private static void ExportCSV(System.Data.DataTable table, string path) { StreamWriter writer; bool comma = false; int columns = table.Columns.Count; using (writer = new StreamWriter(path, false, Encoding.Default)) { foreach (DataColumn col in table.Columns) { if (!comma) comma = true; else writer.Write(','); writer.Write(col.ColumnName); } writer.WriteLine(); foreach (DataRow row in table.Rows) { comma = false; for (int c = 0; c < columns; c++) { if (!comma) comma = true; else writer.Write(','); writer.Write(row[c].ToString()); } writer.WriteLine(); } } }
[b]***************************************************[/b]分割线[b]*************************************************[/b]
删除DataTable中某一列数据重复的行,并加上单引号.输出DataTable
private static void GetChecked(System.Data.DataTable s2) { List<int> indexList = new List<int>(); // 找出待删除的行索引 for (int i = 0; i < s2.Rows.Count - 1; i++) { if (!IsContain(indexList, i)) { for (int j = i + 1; j < s2.Rows.Count; j++) { if (s2.Rows[i][0].ToString() == s2.Rows[j][0].ToString()) { indexList.Add(j); } } } s2.Rows[i][0] = "'" + s2.Rows[i][0].ToString(); } //将最后一行也加上' s2.Rows[s2.Rows.Count - 1][0] = "'" + s2.Rows[s2.Rows.Count - 1][0].ToString(); //里面重新排序 indexList.Sort(); // 根据待删除索引列表删除行 for (int i = indexList.Count - 1; i >= 0; i--) { int index = indexList[i]; s2.Rows.RemoveAt(index); } } /// <summary> /// 判断当前集合内是否已有待删除的索引 /// </summary> /// <param name="indexList">存放集合的索引</param> /// <param name="index">索引</param> /// <returns>包含true不包含false</returns> public static bool IsContain(List<int> indexList, int index) { for (int i = 0; i < indexList.Count; i++) { int tempIndex = indexList[i]; if (tempIndex == index) { return true; } } return false; }
[b]***************************************************[/b]分割线[b]*************************************************[/b]
StopWathch
官方注解:提供一组方法和属性,可用于准确的测量运行时间
命名空间:using System.Diagnostics;
普通公共类,使用New创建
常用方法:
sw.Start();
官方注解:开始或继续测量某个时间间隔的运行时间
sw.Stop();
官方注解:停止测量某个时间间隔的运行时间
sw.E;apsed.ToString()
获取当前实例测量得出的总运行时间
相关文章推荐
- nopcommerce
- noapic和acpi=off能帮我做到什么?
- OpenGL 坐标变换详解
- linux下passwd命令设置修改用户密码
- opengl es 2.0 3.0 MVP矩阵计算
- ubuntu中安装和卸载apache2
- Linux驱动环境配置之内核树的建立
- 开发 openwebrtc 应用
- linux脚本: makefile以及链接库
- ubuntu vim显示搜索高亮和行数
- openwebrtc debug
- Linux 完成量
- 交叉编译 nginx ,基于mipsel平台
- Linux的五个查找命令
- Linux 批量拷贝数据脚本 + ssh 无密码登陆远程LINUX主机
- Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)
- Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)
- Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)
- [ecshop 资料]ecshop商品自定义销量(虚拟销量)实现方法 后台可以自由设置
- 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)