Csharp读取CVS文件与Excel文件
C#读取csv、xls、sql数据库的实现
using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Data.Odbc;using System.Data.OleDb;using System.Data.SqlClient;using System.IO;///<summary>///读取数据并返回数据集///</summary>public class ReadData{private string filename = null;//文件名private string filepath = null;//路径public ReadData(){//// TODO: 在此处添加构造函数逻辑//}///<summary>///初始化文件路径///</summary>///<param name="cfilepath">文件路径</param>///<param name="cfilename">文件名称</param>public ReadData(string cfilepath, string cfilename) {filename = cfilename;filepath = cfilepath;}///<summary>///读取csv格式文件///</summary>///<param name="sqlstr">sql语句</param>///<returns></returns>public DataSet Readcsv(string sqlstr){DataSet ds = new DataSet();string strcon = @"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + filepath + ";Extensions=asc,csv,tab,txt";//IMEX=1数据以文本读取using (OdbcConnection odbccon = new OdbcConnection(strcon)){odbccon.Open();OdbcCommand odbccom = new OdbcCommand();odbccom.Connection = odbccon;mandText = sqlstr;OdbcDataAdapter odbcda = new OdbcDataAdapter(odbccom);odbcda.Fill(ds);odbccon.Close();}return ds;}///<summary>//////</summary>///<param name="sqlstr">sql语句读取数据</param>///<param name="c">表的列标</param>///<param name="s1">开始位置</param>///<param name="s2">结束位置</param>///<returns></returns>public DataSet Readcsv(string sqlstr, int c, string s1, string s2){DataSet ds = new DataSet();DataTable dt = new DataTable();DataRow dr;DataColumn dc;string strcon = @"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + filepath + ";Extensions=asc,csv,tab,txt";//IMEX=1数据以文本读取using (OdbcConnection odbccon = new OdbcConnection(strcon)){odbccon.Open();OdbcCommand odbccom = new OdbcCommand();odbccom.Connection = odbccon;mandText = sqlstr;OdbcDataReader odbcdr = odbccom.ExecuteReader();for (int i = 0; i < odbcdr.FieldCount; i++){dc = new DataColumn();dc.ColumnName = odbcdr.GetName(i);dc.DataType = odbcdr.GetFieldType(i);dt.Columns.Add(dc);}bool flag = false;if (c == 0){while (odbcdr.Read()){if (Convert.ToDateTime(s1) <= Convert.ToDateTime(odbcdr[c].ToString())) {flag = true;break;}}if (flag){do{dr = dt.NewRow();for (int j = 0; j < odbcdr.FieldCount; ++j){dr[j] = odbcdr[j];}dt.Rows.Add(dr);if (Convert.ToDateTime(s2) <=Convert.ToDateTime(odbcdr[c].ToString())){ break; }}while (odbcdr.Read());odbccon.Close();ds.Tables.Add(dt);}}else{while (odbcdr.Read()){if (s1 == odbcdr[c].ToString().Trim()){flag = true;break;}}if (flag){do{dr = dt.NewRow();for (int j = 0; j < odbcdr.FieldCount; ++j){dr[j] = odbcdr[j];}dt.Rows.Add(dr);if (s2 == odbcdr[c].ToString().Trim()){break;}}while (odbcdr.Read());odbccon.Close();ds.Tables.Add(dt);}//Response.Write("<script> alert('输入时间错误!') </script>");}}return ds;}///<summary>///读取csv格式文件///</summary>///<param name="sqlstr"></param>///<param name="c"></param>///<param name="s1"></param>///<param name="s2"></param>///<param name="node">节点</param>///<returns></returns>public DataSet Readcsv(string sqlstr, int c, string s1, string s2, string node){DataSet ds = new DataSet();DataTable dt = new DataTable();DataRow dr;DataColumn dc;string strcon = @"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + filepath + ";Extensions=asc,csv,tab,txt";//IMEX=1数据以文本读取using (OdbcConnection odbccon = new OdbcConnection(strcon)){odbccon.Open();OdbcCommand odbccom = new OdbcCommand();odbccom.Connection = odbccon;mandText = sqlstr;OdbcDataReader odbcdr = odbccom.ExecuteReader();for (int i = 0; i < odbcdr.FieldCount; i++){dc = new DataColumn();dc.ColumnName = odbcdr.GetName(i);dc.DataType = odbcdr.GetFieldType(i);dt.Columns.Add(dc);}bool flag = false;if (c == 0){while (odbcdr.Read()){if (node == odbcdr[1].ToString().Trim().Remove(5)&&Convert.ToDateTime(s1) <= Convert.ToDateTime(odbcdr[c].ToString())){flag = true;break;}}if (flag){do{if (node == odbcdr[1].ToString().Trim().Remove(5)){dr = dt.NewRow();for (int j = 0; j < odbcdr.FieldCount; ++j){dr[j] = odbcdr[j];}dt.Rows.Add(dr);}if (Convert.ToDateTime(s2) <=Convert.ToDateTime(odbcdr[c].ToString())){ break; }}while (odbcdr.Read());odbccon.Close();ds.Tables.Add(dt);}}else{while (odbcdr.Read()){if (s1 == odbcdr[c].ToString().Trim() && node ==odbcdr[1].ToString().Trim().Remove(5)){flag = true;break;}}if (flag){do{if (node == odbcdr[1].ToString().Trim().Remove(5)){dr = dt.NewRow();for (int j = 0; j < odbcdr.FieldCount; ++j){dr[j] = odbcdr[j];}dt.Rows.Add(dr);}if (s2 == odbcdr[c].ToString().Trim()){break;}}while (odbcdr.Read());odbccon.Close();ds.Tables.Add(dt);}//Response.Write("<script> alert('输入时间错误!') </script>"); }}return ds;}///<summary>///读取xls格式文件///</summary>///<param name="sqlstr">sql语句</param>///<returns></returns>public DataSet Readxls(string sqlstr){DataSet ds = new DataSet();string path = bine(filepath, filename + ".xls");string strcon = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=Excel 8.0";//IMEX=1数据以文本读取using (OleDbConnection oledbcon = new OleDbConnection(strcon)){oledbcon.Open();OleDbCommand oledbcom = new OleDbCommand();oledbcom.Connection = oledbcon;mandText = sqlstr;OleDbDataAdapter oledbda = new OleDbDataAdapter(oledbcom);oledbda.Fill(ds);oledbcon.Close();}return ds;}///<summary>//////</summary>///<param name="sqlstr">sql语句读取数据</param>///<param name="c">表的列标</param>///<param name="s1">开始位置</param>///<param name="s2">结束位置</param>///<returns></returns>public DataSet Readxls(string sqlstr, int c, string s1, string s2){DataSet ds = new DataSet();DataTable dt = new DataTable();DataRow dr;DataColumn dc;string path = bine(filepath, filename + ".xls");string strcon = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=Excel 8.0";//IMEX=1数据以文本读取using (OleDbConnection odbccon = new OleDbConnection(strcon)){odbccon.Open();OleDbCommand odbccom = new OleDbCommand();odbccom.Connection = odbccon;mandText = sqlstr;OleDbDataReader odbcdr = odbccom.ExecuteReader();for (int i = 0; i < odbcdr.FieldCount; i++){dc = new DataColumn();dc.ColumnName = odbcdr.GetName(i);dc.DataType = odbcdr.GetFieldType(i);dt.Columns.Add(dc);}bool flag = false;while (odbcdr.Read()){if (s1 == odbcdr[c].ToString().Trim()){flag = true;break;}}if (flag){while (odbcdr.Read()){dr = dt.NewRow();for (int j = 0; j < odbcdr.FieldCount; ++j){dr[j] = odbcdr[j];}dt.Rows.Add(dr);if (s2 == odbcdr[c].ToString().Trim()){break;}}odbccon.Close();ds.Tables.Add(dt);}else{ return null; }//Response.Write("<script> alert('输入时间错误!') </script>"); }return ds;}///<summary>///读取sql数据库文件///</summary>///<param name="sqlstr">sql语句</param>///<returns></returns>public DataSet ReadSql(string sqlstr){DataSet ds = new DataSet();//string strcon = @"uid=sa;password=123456;initial catalog=data;Server=.;Connect Timeout=30";string strcon = @"Trusted_connection=SSPI;initial catalog=data;Server=.";using (SqlConnection sqlcon = new SqlConnection(strcon)){sqlcon.Open();SqlCommand sqlcom = new SqlCommand();sqlcom.Connection = sqlcon;mandText = sqlstr;SqlDataAdapter sqlda = new SqlDataAdapter(sqlcom);sqlda.Fill(ds);sqlcon.Close();}return ds;}///<summary>///把数据集中的数据导入sql数据库///</summary>///<param name="ds">导入的数据集</param>///<param name="tablename">表名</param>public void DataToSql(DataSet ds, string tablename){//string strcon = @"uid=sa;password=123456;initial catalog=data;Server=.;Connect Timeout=30";string strcon = @"Trusted_connection=SSPI;initial catalog=data;Server=.";using (SqlConnection sqlcon = new SqlConnection(strcon)){sqlcon.Open();SqlCommand sqlcom = new SqlCommand();sqlcom.Connection = sqlcon;for (int i = 0; i < ds.Tables[0].Rows.Count; ++i){mandText = "insert into " + tablename + " values('" +Convert.ToDateTime(ds.Tables[0].Rows[i][0]) + " ','" + ds.Tables[0].Rows[i][1] + " ','" + ds.Tables[0].Rows[i][2] + " ','" + ds.Tables[0].Rows[i][3] + " ')";sqlcom.ExecuteNonQuery();}sqlcon.Close();}}///<summary>///初始化路径///</summary>public void clear(){filename = null;filepath = null;} }。
C语言处理CSV文件的方法(二)
C语⾔处理CSV⽂件的⽅法(⼆)strtok函数的使⽤是⼀个⽼⽣常谈的问题了。
该函数的作⽤很⼤,争议也很⼤。
以下的表述可能与⼀些资料有区别或者说与你原来的认识有差异,因此,我尽量以实验为证。
交代⼀下实验环境是必要的,win7+vc6.0,⼀个极其平民化的实验环境。
本⽂中使⽤的源代码⼤部分来⾃于⽹络,稍加修改作为例证。
当然,本⼈⽔平有限,有不妥之处在所难免,各位见谅的同时不妨多做实验,以实验为证。
strtok的函数原型为:char *strtok(char *s, char *delim)功能为:“Parse S into tokens separated by characters in DELIM.If S is NULL, the saved pointer in SAVE_PTR is used as the next starting point. ”翻译成汉语就是:作⽤于字符串s,以包含在delim中的字符为分界符,将s切分成⼀个个⼦串;如果,s为空值NULL,则函数保存的指针SAVE_PTR在下⼀次调⽤中将作为起始位置。
函数的返回值为从指向被分割的⼦串的指针。
这个定义和国内⼀些⽹站上的说法有⼀些差别,正是这些差别导致很多⼈对strtok没有⼀个正确的认识。
希望读者在调⽤⼀些函数前,最好能够读⼀读官⽅的⽂档(多半都是英⽂的),⽽⾮看⼀些以讹传讹的资料。
使⽤strtok需要注意的有以下⼏点:1.函数的作⽤是分解字符串,所谓分解,即没有⽣成新串,只是在s所指向的内容上做了些⼿脚⽽已。
因此,源字符串s发⽣了变化!设源字符串s为 char buffer[INFO_MAX_SZ]=",Fred male 25,John male 62,Anna female 16"; 过滤字符串delim为 char *delim = " ",即空格为分界符。
1 #include <stdio.h>2 #include <string.h>34int main()5 {6char buffer[] = ",Fred male 25,John male 62,Anna female 16";7char *buff;8char *delima = "";910 buff = strtok(buffer, delima);1112return0;13 }上⾯的代码会产⽣这样的结果:⾸先,buffer发⽣了变化。
Csharp进行xls文件操作方法
Csharp进行xls文件操作方法Excel对象微软的Excel对象模型包括了128个不同的对象,从矩形,文本框等简单的对象到透视表,图表等复杂的对象.下面我们简单介绍一下其中最重要,也是用得最多的四个对象。
(1) Application对象。
Application对象处于Excel对象层次结构的顶层,表示Excel自身的运行环境。
(2) Workbook对象。
Workbook对象直接地处于Application对象的下层,表示一个Excel工作薄文件。
(3) Worksheet对象。
Worksheet对象包含于Workbook对象,表示一个Excel工作表。
(4) Range对象。
Range对象包含于Worksheet对象,表示Excel工作表中的一个或多个单元格。
C#中的受管代码和非受管代码在.NET公用语言框架内运行的程序为受管代码。
受管代码在程序中所有类型都受到严格检查,没有指针,对内存的管理完全由运行系统控制。
受控状态下,编写程序更为容易,且更少出错,我们可以花更多的时间在解决实际问题上而不是在计算机语言问题上。
相对而言,那些在.NET框架外运行的程序为非受管代码。
比如:COM组件、ActiveX组件、Win32 API函数、指针运算等。
C#编程中在某些特定情况下,需要运用非受管代码,例如,要利用一个成熟的COM组件,或者调用一个API函数,或者用指针去编写实时/高效程序等。
Visual C#中调用Excel的COM组件一个.NET组件事实上是一个.NET下的DLL,它包含的不仅是运行程序本身,更重要的是包含这个DLL的描述信息(Meta Data,即元数据),而一个COM组件是用其类库(TLB)储存其描述信息。
这些COM组件都是非受管代码,要在Visual C#中使用这些非受管代码的COM组件,就必须把他们转换成受管代码的.NET组件。
所以在用Visual C#调用Excel表格之前,必须完成从COM组件的非受管代码到受管代码的类库的转换。
Excel(.xls,.xlsx)和CSV相互转换-C#简单实现方案
Excel(.xls,.xlsx)和CSV相互转换-C#简单实现方案Excel(XLS, XLSX)和CSV相互转换- C#简单实现方案一、概述XLS和XLSX是Excel电子表格的格式,可以包含包含文本、数值、公式和格式。
而CSV则是一种通用的文件格式,它可以非常容易地被导入到各种表格和数据库中。
因此,日常工作中,我们经常需要对这几种文件格式进行相互转换。
这篇文章将介绍如何使用C#和免费Excel组件Free Spire.XLS来快速实现这一功能。
二、组件下载Free Spire.XLS可以通过E-iceblue官网或者以下两种NuGet方式下载/安装:2. 在Visual Studio中的NuGet Package Manager->Manage NuGet Packages for Solution中搜索Free Spire.XLS并安装3. 在Visual Studio中的NuGet Package Manager->Package Manager Console中输入命令Install-Package FreeSpire.XLS -Version 7.9.1三、Excel(XLS,XLSX)和CSV相互转换XLS转XLSX//载入xls文档Workbook workbook = new Workbook();workbook.LoadFromFile("Input.xls");//保存为xlsx格式workbook.SaveToFile("XlsT oXlsx.xlsx",ExcelVersion.Version2013);XLS转CSV//载入xls文档Workbook workbook = new Workbook();workbook.LoadFromFile(@"Input.xls");//获取第一张工作表Worksheet sheet = workbook.Worksheets[0];//保存为csv格式sheet.SaveToFile("XlsToCsv.csv", ",", Encoding.UTF8);XLSX转XLS//载入xlsx文档Workbook workbook = new Workbook();workbook.LoadFromFile("Input.xlsx");//保存为xls格式workbook.SaveToFile("XlsxT oXls.xls", ExcelVersion.Version97to2003);XLSX转CSV//载入xlsx文档Workbook workbook = new Workbook();workbook.LoadFromFile("Input.xlsx");//获取第一张工作表Worksheet sheet = workbook.Worksheets[0];//保存为csv格式sheet.SaveToFile("XlsxToCSV.csv", ",", Encoding.UTF8);CSV转XLS//载入csv文档Workbook workbook = new Workbook();workbook.LoadFromFile("Input.csv", ",", 1, 1);//保存为xls格式workbook.SaveToFile("CsvT oXls.xls", ExcelVersion.Version97to2003);CSV转XLSX//载入csv文档Workbook workbook = new Workbook();workbook.LoadFromFile("Input.csv", ",", 1, 1);//保存为xlsx格式workbook.SaveToFile("CsvT oXlsx.xlsx", ExcelVersion.Version2013);。
c语言读取csv文件
include <stdio.h>#include<string.h>#define MAX_LINE 128typedef struct{char week[4];char month[4];char date[3];char hour_minute_second[9];char year[5]; } system_time_t;void main(){FILE*fp;float value;system_time_t system_time;char line[MAX_LINE];if((fp=fopen("d:\\1.csv","r"))==NULL){printf("Can't open d:\\1.csv\n");}memset(&system_time,0,sizeof(system_time_t));while(fgets(line, MAX_LINE, fp)){sscanf(line,"%f , %s%s%s%s%s",&value, system_time.week, system_time.month, system_time.date,system_time.hour_minute_second, system_time.year);printf("value=%f system_time=%s %s %s %s %s\n", value,system_time.week, system_time.month, system_time.date,system_time.hour_minute_second, system_time.year);}}struct record_t{double money;time_t tim;};typedef struct record_t record;static const char *const short_months[12] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun","Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};//把每行转成record的数据结构。
C#WinformExcel和CSV互转
C#WinformExcel和CSV互转需要安装 office excelpublic static class ExcelFormatHelper{///<summary>///将Csv⽂件转换为XLS⽂件///</summary>///<param name="FilePath">⽂件全路路径</param>///<returns>返回转换后的Xls⽂件名</returns>public static string CSVSaveasXLS(string FilePath){QuertExcel();string _NewFilePath = "";Excel.Application excelApplication;Excel.Workbooks excelWorkBooks = null;Excel.Workbook excelWorkBook = null;Excel.Worksheet excelWorkSheet = null;try{excelApplication = new Excel.ApplicationClass();excelWorkBooks = excelApplication.Workbooks;excelWorkBook = ((Excel.Workbook)excelWorkBooks.Open(FilePath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing excelWorkSheet = (Excel.Worksheet)excelWorkBook.Worksheets[1];excelApplication.Visible = false;excelApplication.DisplayAlerts=false;_NewFilePath = FilePath.Replace(".csv", ".xls");excelWorkBook.SaveAs(_NewFilePath, Excel.XlFileFormat.xlAddIn8, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Va QuertExcel();// ExcelFormatHelper.DeleteFile(FilePath);//可以不⽤杀掉进程QuertExcel();excelApplication.Quit();GC.WaitForPendingFinalizers();GC.Collect();}catch (Exception exc){throw new Exception(exc.Message);}finally{GC.Collect();}return _NewFilePath;}///<summary>///将xls⽂件转换为csv⽂件///</summary>///<param name="FilePath">⽂件全路路径</param>///<returns>返回转换后的csv⽂件名</returns>public static string XLSSavesaCSV(string FilePath){QuertExcel();string _NewFilePath = "";Excel.Application excelApplication;Excel.Workbooks excelWorkBooks = null;Excel.Workbook excelWorkBook = null;Excel.Worksheet excelWorkSheet = null;try{excelApplication = new Excel.ApplicationClass();excelWorkBooks = excelApplication.Workbooks;excelWorkBook = ((Excel.Workbook)excelWorkBooks.Open(FilePath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing excelWorkSheet = (Excel.Worksheet)excelWorkBook.Worksheets[1];excelApplication.Visible = false;excelApplication.DisplayAlerts = false;_NewFilePath = FilePath.Replace(".xls", ".csv");// excelWorkSheet._SaveAs(FilePath, Excel.XlFileFormat.xlCSVWindows, Missing.Value, Missing.Value, Missing.Value,Missing.Value,Missing.Value, Missing.Value, Missing.Value);excelWorkBook.SaveAs(_NewFilePath, Excel.XlFileFormat.xlCSV, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Miss QuertExcel();//ExcelFormatHelper.DeleteFile(FilePath);}catch (Exception exc){throw new Exception(exc.Message);}return _NewFilePath;}///<summary>///删除⼀个指定的⽂件///</summary>///<param name="FilePath">⽂件路径</param>///<returns></returns>public static bool DeleteFile(string FilePath){try{bool IsFind = File.Exists(FilePath);if (IsFind){File.Delete(FilePath);}else{throw new IOException("指定的⽂件不存在");}return true;}catch (Exception exc){throw new Exception(exc.Message);}}///<summary>///执⾏过程中可能会打开多个EXCEL⽂件所以杀掉///</summary>private static void QuertExcel(){Process[] excels = Process.GetProcessesByName("EXCEL");foreach (var item in excels){item.Kill();}}}----------------------------下⾯的⽅法⽐较好//将xml Excel转换为标准的CSV格式Object Nothing = Missing.Value;//由于COM组件很多值需要⽤Missing.Value代替Microsoft.Office.Interop.Excel.Application ExclApp = new Microsoft.Office.Interop.Excel.Application();// 初始化Microsoft.Office.Interop.Excel.Workbook ExclDoc = ExclApp.Workbooks.Open(savePath, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing);//打开Excl⼯作薄try{Object format = Microsoft.Office.Interop.Excel.XlFileFormat.xlCSV;ExclApp.DisplayAlerts = false;ExclDoc.SaveAs(savePath.Replace("xls","csv"), format, Nothing, Nothing, Nothing, Nothing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Nothing, Nothing, Nothing, Nothing, Nothing);}catch (Exception ex) { } ExclDoc.Close(Nothing, Nothing, Nothing); NAR(ExclDoc); ExclApp.Quit(); NAR(ExclApp);GC.WaitForPendingFinalizers();GC.Collect();/// <summary>/// 释放资源/// </summary>/// <param name="o"></param>private void NAR(object o){try{System.Runtime.InteropServices.Marshal.ReleaseComObject(o);}catch { }finally{o = null;}}。
C#导出Excel和CSV文件
C#导出Excel和CSV⽂件在项⽬的开发过程中,有数据导出到excel⽂件的要求,于是就按照正常的思路导出为excel⽂件。
可是在实际使⽤的过程中发⽣了许多的问题由于客户安装的excel的版本的和我开发⽤到的版本dll不⼀致,导致好多的导出操作都出现异常,也有部分的客户PC中根本都没有安装office⽤的是WPS还有⼀些其他的因素,由于客户端运⾏环境的差异,都会出现⼀些错误。
对我来说开发了⼀个产品⽽要求使⽤者必须安装这个那个是⼀件很不喜欢的事情,就我来说就很不喜欢使⽤⼀个软件时突然出错被告知你需要安装个那个版本的什么东西,会让⼈很反感。
由此引出万能的csv⽂件,以前也接触过,知道它的单纯,也懂的它发包容和接纳,于是就想到⽤csv⽂件导出。
我个⼈的理解csv⽂件就和txt⽂件没有什么区别,只是⽤起来给⼈感觉⾼⼤上⼀点点,显得更专业⼀点,通过将其内容按照⼀定的规则编辑,既可以按照excel⼀样按照⾏列的格式展现。
所以csv⽂件可以⽤各种版本的excel和WPS打开不会出现任何的兼容的问题,退⼀万步讲,还可以⽤记事本打开,可谓海纳百川,有容乃⼤。
CSV 百度百科:逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其⽂件以纯⽂本形式存储表格数据(数字和⽂本)。
纯⽂本意味着该⽂件是⼀个序列,不含必须像⼆进制数字那样被解读的数据。
CSV⽂件由任意数⽬的记录组成,记录间以某种换⾏符分隔;每条记录由组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或。
通常,所有记录都有完全相同的字段序列。
就是它了,在系统⾥边有好多地⽅都需要将数据导出,所以对于导出的功能我得写成的⼀个⽅法,⼀遍书写,哪⾥都能⽤,只需要传递参数即可。
我的设计是将datagridview的数据导出,所以我就想到直接给导出的⽅法传递⼀个datagridview的对象,这样只要需要导出的地⽅只需要将datagridview传递过去即可,代码如下:/// <summary>/// 导出csv⽂件/// </summary>/// <param name="title">导出⽂件名称</param>/// <param name="dgv">数据对象</param>/// <param name="isShowExcel">导出的过程中是否打开正在导出的⽂件</param>/// <returns></returns>public static bool OutToCsvFromDataGridView(string title, DataGridView dgv, bool isShowExcel){if (dgv == null || dgv.RowCount == 0) return true;SaveFileDialog saveDlg = new SaveFileDialog();saveDlg.Filter = "CSV⽂件(*.csv)|*.csv";saveDlg.FileName = title + DateTime.Now.ToString("yyyyMMddhhmmss");try{if (saveDlg.ShowDialog() == DialogResult.OK){int size = 1024;int sizeCnt = (int)Math.Ceiling((Double)dgv.RowCount / (Double)2000);StreamWriter write = new StreamWriter(saveDlg.FileName,false,Encoding.Default,size*sizeCnt);//标题⾏for (int t = 0; t < dgv.ColumnCount; t++){if (dgv.Columns[t].Visible == true){write.Write(dgv.Columns[t].HeaderText + ",");}}write.WriteLine();//明细⾏for (int lin = 2; lin <= dgv.RowCount + 1; lin++){if (dgv.Rows[lin-2].Visible == true){string Tem = "";for (int k = 0; k < dgv.ColumnCount; k++){if (dgv.Columns[k].Visible == true){if (dgv.Rows[lin - 2].Cells[k].Value != null){string TemString = dgv.Rows[lin - 2].Cells[k].Value.ToString().Trim().Replace(",", ".").Replace("\r\n",".").Replace("\r",".").Replace("\n",".");Tem += TemString;Tem += ",";}else{string TemString = "";Tem += TemString;Tem += ",";}}}write.WriteLine(Tem);}write.Flush();write.Close();CMessageBox.ShowInfoMessage("导出成功:" + saveDlg.FileName.ToString().Trim());}}catch (System.Exception ex){string message = "CSV⽂件导出失败。
一起来学用CSharpc操作excel表
intmaxOID = 0;
inttemp = 0;
for(inti = 0; i < rowNum; i++)
{
temp =int.Parse(this.dataGridView1[0, i].Value.ToString());
{
this.tbX.Text = e.X.ToString();
this.tbY.Text = e.Y.ToString();
}
}
//刷新dataGridView1
privatevoidRefreshTable()
{
connection =newOleDbConnection(connStr);
connection.Open();
源代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
connection.Close();
}
//程序加载事件idFrmMain_Load(objectsender,EventArgse)
{
this.RefreshTable();
}
//获取一个可以用的OID
privatestringGetOID()
{
if(maxOID < temp)
{
maxOID = temp;
如何用VC读取Excel表格中的数据详细介绍
如何用VC读取Excel表格中的数据详细介绍如何用VC读取Excel表格中的数据详细介绍2007-03-29 17:44首先,我们要明白的是,VC是通过ODBC来访问Excel表格的,也就是说,VC将Excel表格,当作数据库来处理。
当然了,也可以通过读以tab键隔开的文件来处理这样的文件,但是,我还是更加愿意用读取数据库的方式来访问Excel表格。
第二,既然是数据库,那么,就需要建立一个与该库对应的dsn,这个,而且,在建立dsn之前,首先要确定,已经安装了Excel的驱动。
第三,要访问数据库中的表格,就要先打开该表格,如此,就需要一个与之对应的RecordSet。
如此,有如下代码:void CRWExcel::ReadFromExcel(){CDatabase database;CString sSql;CString sItem1, sItem2;CString sDriver;CString sDsn;CString sFile = "Demo.xls";// 将被读取的Excel文件名// 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)"sDriver = GetExcelDriver();if (sDriver.IsEmpty()){// 没有发现Excel驱动AfxMessageBox("没有安装Excel驱动!");return;}// 创建进行存取的字符串sDsn.Format("ODBC;DRIVER={%s};DSN='''';DBQ=%s", sDriver, sFile);TRY{// 打开数据库,建立与这个Excel对应的Databasedatabase.Open(NULL, false, false, sDsn);CRecordset recset(&database);// 设置读取的查询语句.demo.xls并非文件名,需要在excel中进行//设置,具体文章最后有讲sSql = "SELECT Age, Name FROM DEMO.XLS";// 执行查询语句,打开表格recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);// 获取查询结果while (!recset.IsEOF()){//读取Excel内部数值recset.GetFieldValue("Name ", sItem1);recset.GetFieldValue("Age", sItem2);// 移到下一行recset.MoveNext();}// 关闭数据库database.Close();}CATCH(CDBException, e){// 数据库操作产生异常时...AfxMessageBox("数据库错误: " + e->m_strError);}END_CATCH;}需要注意的是,我们对我们的Excel表格需要进行一些处理,需要先选定我们要读取的数据,之后,选择插入>>名字>>之后,在输入框中输入我们在select语句中用到的表名。
c读取excel文件内容
c读取excel文件内容在C语言编程中,有时候我们需要读取Excel文件的内容,进行一些数据处理或者分析。
本文将介绍如何在C语言中读取Excel文件的内容,以及如何处理这些数据。
首先,我们需要使用C语言中的一些库来实现对Excel文件的读取。
在C语言中,我们可以使用libxls这个库来读取Excel文件。
这个库提供了一些函数,可以帮助我们打开Excel文件,并逐行读取其中的内容。
接下来,我们需要打开Excel文件,并创建一个workbook对象来表示这个文件。
然后,我们可以使用libxls提供的函数来逐行读取Excel文件中的内容。
通过这些函数,我们可以获取Excel文件中的每一行数据,然后进行处理。
在读取Excel文件的内容之后,我们可能需要对这些数据进行一些处理。
例如,我们可以将这些数据存储到一个数组中,或者进行一些计算操作。
在C语言中,我们可以使用数组来存储这些数据,然后通过循环来对这些数据进行处理。
除了使用libxls这个库之外,我们还可以考虑使用其他一些库来实现对Excel文件的读取。
例如,我们可以使用libxlsxwriter这个库来创建和写入Excel文件,同时也可以使用它来读取Excel文件的内容。
这个库提供了一些函数,可以帮助我们读取Excel文件中的内容,并进行一些处理操作。
总的来说,在C语言中读取Excel文件的内容并不是一件很困难的事情。
通过使用一些库,我们可以很容易地实现对Excel文件的读取,并对其中的内容进行处理。
通过本文的介绍,相信大家对在C语言中读取Excel文件的内容有了更深入的了解。
希望本文能对大家有所帮助。
C#读取CSV文件 (简单通用)
for (int j = 0; j < dataArray.Length; j++) { if (IsFirst) { DataColumn dc = new DataColumn(dataArray[j]); csvDT.Columns.Add(dc); } else { if (oddStartQuota) { //因为前面用逗号分割,所以要加上逗号 cellData += "," + dataArray[j]; //是否以奇数个引号结尾 if (IfOddEndQuota(dataArray[j])) {
{ int quotaCount; bool oddQuota;
quotaCount = 0; for (int i = 0; i < dataLine.Length; i++) { if (dataLine[i] == '\"') { quotaCount++; } }
oddQuota = false; if (quotaCount % 2 == 1) { oddQuota = true; }
continue; } else { oddStartQuota = true; cellData = dataArray[j]; continue; } } else { Row[Column] = GetHandleData(dataArray[j]); Column++; } }
} }
if (!IsFirst) { this.csvDT.Rows.Add(Row); } IsFirst = false; if (oddStartQuota) { throw new Exception("数据格式有问题"); }
c读取excel文件的几种方法
C# 读取EXCEL文件的几种经典方法例子引入(读取时excel要打开)namespace读取excel测试{public partial class Form1 : Form{public Form1(){InitializeComponent();}//读取private void simpleButton1_Click(object sender, EventArgs e){bindingSource1.DataSource = null;OpenFileDialog fd = newOpenFileDialog();fd.Filter = "电子表À格|*.xlsx|电子表格|*.xls|所有文件|*.*";//打开对话框if (fd.ShowDialog() ==DialogResult.OK){//得到文件路径名称this.txtPath.Text = fd.FileName;//将excel的对象放到bindingSource1中预览DataTable dt =returndb(this.txtPath.Text).Tables[0];bindingSource1.DataSource = dt;gridView1.BestFitColumns();}}//读取方法public DataSet returndb(string path){string strConn ="Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + path + ";" + "ExtendedProperties=Excel 8.0;";OleDbConnection conn = new OleDbConnection(strConn);conn.Open();string strExcel = "";OleDbDataAdapter myCommand = null;DataSet ds = null;strExcel = "select * from [sheet1$]"; myCommand = newOleDbDataAdapter(strExcel, strConn);ds = new DataSet();myCommand.Fill(ds, "table1");return ds;//另一种写法//FileInfo fileInfo = newFileInfo(path);//if (!fileInfo.Exists) return null;//string strConn =@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1'";//OleDbConnection objConn = new OleDbConnection(strConn);//DataSet dsExcel = new DataSet();//try//{// objConn.Open();// DataTable table =objConn.GetOleDbSchemaTable(System.Data.OleDb.O leDbSchemaGuid.Tables, null);// string tableName =table.Rows[0]["Table_Name"].ToString();// string strSql = "select * from [" + tableName + "]";// OleDbDataAdapter odbcExcelDataAdapter = newOleDbDataAdapter(strSql, objConn);//odbcExcelDataAdapter.Fill(dsExcel);// return dsExcel;//}//catch (Exception ex)//{// throw ex;//}}}}1.方法一:采用OleDB读取EXCEL文件:把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下:public DataSet ExcelToDS(string Path){string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";OleDbConnection conn = new OleDbConnection(strConn);conn.Open();string strExcel = "";OleDbDataAdapter myCommand = null;DataSet ds = null;strExcel="select * from [sheet1$]";myCommand = new OleDbDataAdapter(strExcel, strConn);ds = new DataSet();myCommand.Fill(ds,"table1");return ds;}对于EXCEL中的表即sheet([sheet1$])如果不是固定的可以使用下面的方法得到string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";OleDbConnection conn = new OleDbConnection(strConn);DataTable schemaTable =objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables,null);string tableName=schemaTable.Rows[0][2].ToString().Trim();另外:也可进行写入EXCEL文件,实例如下:public void DSToExcel(string Path,DataSet oldds){//先得到汇总EXCEL的DataSet 主要目的是获得EXCEL在DataSet中的结构string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ;Data Source ="+path1+";Extended Properties=Excel 8.0" ;OleDbConnection myConn = new OleDbConnection(strCon) ;string strCom="select * from [Sheet1$]";myConn.Open ( ) ;OleDbDataAdapter myCommand = new OleDbDataAdapter( strCom, myConn ) ;ystem.Data.OleDb.OleDbCommandBuilder builder=new OleDbCommandBuilder(myCommand);//QuotePrefix和QuoteSuffix主要是对builder生成InsertComment 命令时使用。
C#读取csv格式文件的方法
C#读取csv格式⽂件的⽅法本⽂实例讲述了C#读取csv格式⽂件的⽅法。
分享给⼤家供⼤家参考。
具体实现⽅法如下:⼀、CSV⽂件规则1 开头是不留空,以⾏为单位。
2 可含或不含列名,含列名则居⽂件第⼀⾏。
3 ⼀⾏数据不跨⾏,⽆空⾏。
4 以半⾓逗号(即,)作分隔符,列为空也要表达其存在。
5 列内容如存在半⾓逗号(即,)则⽤半⾓引号(即',')将该字段值包含起来。
6 列内容如存在半⾓引号(即")则应替换成半⾓双引号("")转义,并⽤半⾓引号(即"")将该字段值包含起来。
7 ⽂件读写时引号,逗号操作规则互逆。
8 内码格式不限,可为 ASCII、Unicode 或者其他。
9 不⽀持特殊字符⼆、C#读取csv⽂件的⽅法复制代码代码如下://读CSV⽂件类,读取指定的CSV⽂件,可以导出DataTablepublic class CsvStreamReader{private ArrayList rowAL; //⾏链表,CSV⽂件的每⼀⾏就是⼀个链private string fileName; //⽂件名private Encoding encoding; //编码public CsvStreamReader(){this.rowAL = new ArrayList();this.fileName = "";this.encoding = Encoding.Default;}/// <summary>////// </summary>/// <param name="fileName">⽂件名,包括⽂件路径</param>public CsvStreamReader(string fileName){this.rowAL = new ArrayList();this.fileName = fileName;this.encoding = Encoding.Default;LoadCsvFile();}/// <summary>////// </summary>/// <param name="fileName">⽂件名,包括⽂件路径</param>/// <param name="encoding">⽂件编码</param>public CsvStreamReader(string fileName, Encoding encoding){this.rowAL = new ArrayList();this.fileName = fileName;this.encoding = encoding;LoadCsvFile();}/// <summary>/// ⽂件名,包括⽂件路径/// </summary>public string FileName{set{this.fileName = value;LoadCsvFile();}}/// <summary>/// ⽂件编码/// </summary>public Encoding FileEncoding{set{this.encoding = value;}}/// <summary>/// 获取⾏数/// </summary>public int RowCount{get{return this.rowAL.Count;}}/// <summary>/// 获取列数/// </summary>public int ColCount{get{int maxCol;maxCol = 0;for (int i = 0; i < this.rowAL.Count; i++){ArrayList colAL = (ArrayList)this.rowAL[i];maxCol = (maxCol > colAL.Count) ? maxCol : colAL.Count; }return maxCol;}}/// <summary>/// 获取某⾏某列的数据/// row:⾏,row = 1代表第⼀⾏/// col:列,col = 1代表第⼀列/// </summary>public string this[int row, int col]{get{//数据有效性验证CheckRowValid(row);CheckColValid(col);ArrayList colAL = (ArrayList)this.rowAL[row - 1];//如果请求列数据⼤于当前⾏的列时,返回空值if (colAL.Count < col){return "";}return colAL[col - 1].ToString();}}/// <summary>/// 根据最⼩⾏,最⼤⾏,最⼩列,最⼤列,来⽣成⼀个DataTable类型的数据 /// ⾏等于1代表第⼀⾏/// 列等于1代表第⼀列/// maxrow: -1代表最⼤⾏/// maxcol: -1代表最⼤列/// </summary>public DataTable this[int minRow, int maxRow, int minCol, int maxCol]{get{//数据有效性验证CheckRowValid(minRow);CheckMaxRowValid(maxRow);CheckColValid(minCol);CheckMaxColValid(maxCol);if (maxRow == -1){maxRow = RowCount;}if (maxCol == -1){maxCol = ColCount;}if (maxRow < minRow){throw new Exception("最⼤⾏数不能⼩于最⼩⾏数");}if (maxCol < minCol){throw new Exception("最⼤列数不能⼩于最⼩列数");}DataTable csvDT = new DataTable();int i;int col;int row;//增加列for (i = minCol; i <= maxCol; i++){csvDT.Columns.Add(i.ToString());}for (row = minRow; row <= maxRow; row++){DataRow csvDR = csvDT.NewRow();i = 0;for (col = minCol; col <= maxCol; col++){csvDR[i] = this[row, col];i++;}csvDT.Rows.Add(csvDR);}return csvDT;}}/// <summary>/// 检查⾏数是否是有效的/// </summary>/// <param name="col"></param>private void CheckRowValid(int row){if (row <= 0){throw new Exception("⾏数不能⼩于0");}if (row > RowCount){throw new Exception("没有当前⾏的数据");}}/// <summary>/// 检查最⼤⾏数是否是有效的/// </summary>/// <param name="col"></param>private void CheckMaxRowValid(int maxRow){if (maxRow <= 0 && maxRow != -1){throw new Exception("⾏数不能等于0或⼩于-1"); }if (maxRow > RowCount){throw new Exception("没有当前⾏的数据");}}/// <summary>/// 检查列数是否是有效的/// </summary>/// <param name="col"></param>private void CheckColValid(int col){if (col <= 0){throw new Exception("列数不能⼩于0");}if (col > ColCount){throw new Exception("没有当前列的数据");}}/// <summary>/// 检查检查最⼤列数是否是有效的/// </summary>/// <param name="col"></param>private void CheckMaxColValid(int maxCol){if (maxCol <= 0 && maxCol != -1){throw new Exception("列数不能等于0或⼩于-1"); }if (maxCol > ColCount){throw new Exception("没有当前列的数据");}}/// <summary>/// 载⼊CSV⽂件/// </summary>private void LoadCsvFile(){//对数据的有效性进⾏验证if (this.fileName == null){throw new Exception("请指定要载⼊的CSV⽂件名");}else if (!File.Exists(this.fileName)){throw new Exception("指定的CSV⽂件不存在");}else{}if (this.encoding == null){this.encoding = Encoding.Default;}StreamReader sr = new StreamReader(this.fileName, this.encoding);string csvDataLine;csvDataLine = "";while (true){string fileDataLine;fileDataLine = sr.ReadLine();if (fileDataLine == null){break;}if (csvDataLine == ""){csvDataLine = fileDataLine;//GetDeleteQuotaDataLine(fileDataLine);}else{csvDataLine += "\\r\\n" + fileDataLine;//GetDeleteQuotaDataLine(fileDataLine); }//如果包含偶数个引号,说明该⾏数据中出现回车符或包含逗号if (!IfOddQuota(csvDataLine)){AddNewDataLine(csvDataLine);csvDataLine = "";}}sr.Close();//数据⾏出现奇数个引号if (csvDataLine.Length > 0){throw new Exception("CSV⽂件的格式有错误");}}/// <summary>/// 获取两个连续引号变成单个引号的数据⾏/// </summary>/// <param name="fileDataLine">⽂件数据⾏</param>/// <returns></returns>private string GetDeleteQuotaDataLine(string fileDataLine){return fileDataLine.Replace("\\"\\"", "\\"");}/// <summary>/// 判断字符串是否包含奇数个引号/// </summary>/// <param name="dataLine">数据⾏</param>/// <returns>为奇数时,返回为真;否则返回为假</returns>private bool IfOddQuota(string dataLine){int quotaCount;bool oddQuota;quotaCount = 0;for (int i = 0; i < dataLine.Length; i++){if (dataLine[i] == '\\"'){quotaCount++;}}oddQuota = false;if (quotaCount % 2 == 1){oddQuota = true;}return oddQuota;}/// <summary>/// 判断是否以奇数个引号开始/// </summary>/// <param name="dataCell"></param>/// <returns></returns>private bool IfOddStartQuota(string dataCell) {int quotaCount;bool oddQuota;quotaCount = 0;for (int i = 0; i < dataCell.Length; i++){if (dataCell[i] == '\\"'){quotaCount++;}else{break;}}oddQuota = false;if (quotaCount % 2 == 1){oddQuota = true;}return oddQuota;}/// <summary>/// 判断是否以奇数个引号结尾/// </summary>/// <param name="dataCell"></param>/// <returns></returns>private bool IfOddEndQuota(string dataCell) {int quotaCount;bool oddQuota;quotaCount = 0;for (int i = dataCell.Length - 1; i >= 0; i--) {if (dataCell[i] == '\\"'){quotaCount++;}else{break;}}oddQuota = false;if (quotaCount % 2 == 1){oddQuota = true;}return oddQuota;}/// <summary>/// 加⼊新的数据⾏/// </summary>/// <param name="newDataLine">新的数据⾏</param>private void AddNewDataLine(string newDataLine){//System.Diagnostics.Debug.WriteLine("NewLine:" + newDataLine);////return;ArrayList colAL = new ArrayList();string[] dataArray = newDataLine.Split(',');bool oddStartQuota; //是否以奇数个引号开始string cellData;oddStartQuota = false;cellData = "";for (int i = 0; i < dataArray.Length; i++){if (oddStartQuota){//因为前⾯⽤逗号分割,所以要加上逗号cellData += "," + dataArray[i];//是否以奇数个引号结尾if (IfOddEndQuota(dataArray[i])){colAL.Add(GetHandleData(cellData));oddStartQuota = false;continue;}}else{//是否以奇数个引号开始if (IfOddStartQuota(dataArray[i])){//是否以奇数个引号结尾,不能是⼀个双引号,并且不是奇数个引号if (IfOddEndQuota(dataArray[i]) && dataArray[i].Length > 2 && !IfOddQuota(dataArray[i])) {colAL.Add(GetHandleData(dataArray[i]));oddStartQuota = false;continue;}else{oddStartQuota = true;cellData = dataArray[i];continue;}}else{colAL.Add(GetHandleData(dataArray[i]));}}}if (oddStartQuota){throw new Exception("数据格式有问题");}this.rowAL.Add(colAL);}/// <summary>/// 去掉格⼦的⾸尾引号,把双引号变成单引号/// </summary>/// <param name="fileCellData"></param>/// <returns></returns>private string GetHandleData(string fileCellData){if (fileCellData == ""){return "";}if (IfOddStartQuota(fileCellData)){if (IfOddEndQuota(fileCellData)){return fileCellData.Substring(1, fileCellData.Length - 2).Replace("\\"\\"", "\\""); //去掉⾸尾引号,然后把双引号变成单引号}else{throw new Exception("数据引号⽆法匹配" + fileCellData);}}else{//考虑形如"" """" """"""if (fileCellData.Length > 2 && fileCellData[0] == '\\"'){fileCellData = fileCellData.Substring(1, fileCellData.Length - 2).Replace("\\"\\"", "\\""); //去掉⾸尾引号,然后把双引号变成单引号}}return fileCellData;}}希望本⽂所述对⼤家的C#程序设计有所帮助。
读取Csv文件(c实现)
读取Csv⽂件(c实现)最近有个项⽬要读取Csv⽂件的内容,Csv⽂件还是蛮常⽤,所以想封装好,便于以后使⽤。
使⽤⽅法可以从下⾯的main函数看出来,⾸先⽤ReadCsvData读取Csv⽂件到⼀个数组中,然后就可以使⽤GetCsvData读取想要的某⾏的数据了,最后结束时要⽤FreeCsvData释放空间。
#include <stdio.h>#include <stdlib.h> // For system("pause");#include "ReadCsvFile.h"void main(){char filename[] = "REF.csv";double ddata[7];int i;// 读⽂件if (!ReadCsvData(filename))printf_s("The file %s was not opened\n", filename);elseprintf_s("The file %s was read successfully\n", filename);// 显⽰部分数据for (i = 1; i < 10 ; i++ ){GetCsvData(i, ddata);printf_s("%.0lf\t%.0lf\t%.0lf\t%.0lf\t%.0lf\t%.0lf\t%.0lf\n",ddata[0],ddata[1],ddata[2],ddata[3],ddata[4],ddata[5],ddata[6]);}// 释放Csv空间FreeCsvData();system("pause");}运⾏结果如下The file REF.csv was read successfully-30894 25745 15447 36043 -56639 0 0-30876 25756 15449 36030 -56629 0 0-30858 25768 15451 36017 -56618 0 0-30804 25802 15456 35978 -56587 0 0-30749 25837 15462 35940 -56555 0 0-30568 25951 15481 35811 -56450 0 0-30314 26111 15508 35631 -56303 0 0-29988 26317 15542 35399 -56115 0 0-29590 26569 15584 35116 -55884 0 0请按任意键继续. . .封装⽂件如下:ReadCsvFile.h:void FreeCsvData();int ReadCsvData(char* csvFilePath);void GetCsvData(int iIndex, double* dAimPos);ReadCsvFile.c://////////////////////////////////////////////////////////////////////////// Read csv file data//////////////////////////////////////////////////////////////////////////#include <stdio.h>#include <memory.h> // for memset#include <stdlib.h> // For malloc, free#define MAX_LINE_SIZE 256#define GET_DATA(row, col) gdCsvData[(row - 1)*giNumCol + col - 1] // row为1到giNumRow,col为1到giNumCol 使⽤⼀维数组,动态分配、释放更⽅便double* gdCsvData = NULL;int giNumData = 0;int giNumRow = 0;int giNumCol = 7; // ⽂件中⼀⾏有多少数据,这个要根据实际⽂件定,还要相应改ReadCsvData函数中sscanf_s的读取个数// get total lines of file 此函数可以单独拿来⽤,可以获取⽂本⽂件的有效⾏数int GetTotalLineCount(FILE* fp){int i = 0;char strLine[MAX_LINE_SIZE];fseek(fp,0,SEEK_SET);while (fgets(strLine, MAX_LINE_SIZE, fp))i++;fseek(fp,0,SEEK_SET);return i;}// assign space for gdCsvDataint AssignSpaceForData(int inumdata){gdCsvData = (double*)malloc(sizeof(double)*inumdata);if (gdCsvData == NULL)return 0;memset(gdCsvData, 0, sizeof(double)*inumdata);return 1;}// free space for dCsvDatevoid FreeCsvData(){free(gdCsvData);gdCsvData = NULL;}// read data from csv fileint ReadCsvData(char* csvFilePath){FILE* fCsv;char strLine[MAX_LINE_SIZE];int ierr;int iloop;// 已经有了数据,则先删除if (gdCsvData != NULL)FreeCsvData();// 打开⽂件if( fopen_s( &fCsv, csvFilePath, "r" ) != 0 )return 0;else{// 确定动态数组的⼤⼩,然后开辟空间giNumRow = GetTotalLineCount(fCsv);giNumData = giNumRow*giNumCol;AssignSpaceForData(giNumData);// 读取数据for (iloop = 1; iloop <= giNumRow; iloop++){if (fgets(strLine, MAX_LINE_SIZE, fCsv)){ierr = sscanf_s(strLine, "%lf,%lf,%lf,%lf,%lf,%lf,%lf",&GET_DATA(iloop, 1),&GET_DATA(iloop, 2),&GET_DATA(iloop, 3),&GET_DATA(iloop, 4),&GET_DATA(iloop, 5),&GET_DATA(iloop, 6),&GET_DATA(iloop, 7)); // 要根据情况修改,⽐如⼀⾏不是7个数据// 如果某⾏没有读取全数据,则读取结束if (ierr != giNumCol)break;}}// 关闭⽂件fclose(fCsv);}return 1;}// get csv data according to row(from 1 to giNumRow)void GetCsvData(int irow, double* dAimPos){int i;// 修正⾏数if (irow < 1)irow = 1;if (irow > giNumRow)irow = giNumRow;// 读取数据for (i = 1; i <= giNumCol; i++)dAimPos[i-1] = GET_DATA(irow, i);}By the way,刚开始是⽤⼆维数组动态开辟空间的,开辟和释放都很⿇烦,如下// assign space for gdCsvDatavoid AssignSpaceForData(int irow, int icolumn){int i;gdCsvData = (double**)malloc(sizeof(double*)*irow); if (gdCsvData == NULL){printf_s("out of memory\n");exit(0);}for (i = 0; i < irow; i++){gdCsvData[i] = (double*)malloc(sizeof(double)*icolumn); if (gdCsvData == NULL) {printf_s("out of memory\n");exit(0);}}}// free space for dCsvDatevoid FreeSpaceOfData(int irow, int icolumn){int i;for (i=0; i<irow; i++) free(gdCsvData[i]); free(gdCsvData);}所以对于动态分配⼆维数组最好还是⽤⼀维数据加宏的⽅式代替。
C#读取CSV和EXCEL文件示例
C#读取CSV和EXCEL⽂件⽰例我们习惯了直接连到数据库上⾯读取数据表的数据内容;如果有⼀天我们需要读取CSV,EXCEL⽂件的内容的时候,可不可以也像读数据表的⽅式⼀样呢?当然可以,使⽤OleDB 是很简单的事情1public static bool WriteContentToFile(FileStream fs, StringBuilder sb)2 {3bool succ = false;4using (StreamWriter sw = new StreamWriter(fs, Encoding.Default))5 {6 sw.WriteLine(sb.ToString());7 succ = true;89 }10return succ;11 }WriteContentToFile按SQL的⽅式读取Excel⽂件1public static void ImportDictionaryFromExcel(string strExcelFileName,IList<Dictionary> list,bool Exce03Or07)2 {34string oleDB = string.Empty;56if (Exce03Or07)7 {8 oleDB = "Jet.OLEDB.4.0";9 }10else11 {12 oleDB = "ACE.OLEDB.12.0";13 }1415string strConn = string.Format("Provider=Microsoft.{0};Data Source={1};Extended Properties='Excel 8.0;HDR=YES;IMEX=1'", oleDB, strExcelFileName);1617//string strExcel = string.Format("select * from [{0}$]", strSheetName); 这是⼀种⽅法18string strExcel = "select * from [sheet1$]";1920using (IDbConnection conn = new OleDbConnection(strConn))21 {22//适配到数据源23 IDbDataAdapter adapter = new OleDbDataAdapter(strExcel, (OleDbConnection)conn);24 DataSet ds = new DataSet();25 adapter.Fill(ds);26 DataTable dt =ds.Tables[0];27if (dt.Rows.Count > 0)28 {29foreach (DataRow dr in dt.Rows)30 {31string name=dr["Name"].ToString().Trim();32string type=dr["Type"].ToString().Trim();33string ripplesTo=dr["RipplesTo"].ToString().Trim();34string engName=dr["ENGName"].ToString().Trim();35string cnName=dr["CNName"].ToString().Trim();36string meaning=dr["Meaning"].ToString().Trim();373839 }4041 }4243 }444546 }ImportDictionaryFromExcel。
Csharp读写Excel
using System.Reflection;using Excel=Microsoft.Office.Interop;protected void Button1_Click(object sender, EventArgs e){string rootPath = Server.MapPath("\\");string lastPath = "ExportExcel\\CData.xls";string templatePath = "JiaBanDaoXiu.xlt";Excel.Excel.XlFileFormat version =Excel.Excel.XlFileFormat.xlExcel8;//Excel 2003版本//if (System.IO.Path.GetExtension(fileName).ToLower() == ".xlsx") version = Excel.Excel.XlFileFormat.xlOpenXMLWorkbook;//Excel 2007版本try{//创建Application对象Excel.Excel.Application xApp = new Excel.Excel.Application();xApp.Visible = true;//得到WorkBook对象, 可以用两种方式之一: 下面的是打开已有的文件if (File.Exists(rootPath + templatePath)){Label1.Text = "找到模板";}else{Label1.Text = "找不到模板文件!";}Excel.Excel.Workbook xBook = xApp.Workbooks._Open(rootPath + templatePath,Missing.Value, Missing.Value, Missing.Value, Missing.Value,Missing.Value, Missing.Value, Missing.Value, Missing.Value,Missing.Value, Missing.Value, Missing.Value, Missing.Value);//指定要操作的Sheet,两种方式:Excel.Excel.Worksheet xSheet =(Excel.Excel.Worksheet)xBook.Sheets[1];//写入数据Excel.Excel.Range rng3 = xSheet.get_Range("C6", Missing.Value);rng3.Value2 = "Test";rng3.Interior.ColorIndex = 6; //设置Range的背景色// 保存方式二:保存WorkSheetif (File.Exists(rootPath + lastPath))File.Delete(rootPath + lastPath);xSheet.SaveAs(rootPath + lastPath,version , Missing.Value, Missing.Value, Missing.Value,Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);//string fileName =FilePath+"CData2.xls";//Excel.XlFileFormat version = Excel.XlFileFormat.xlExcel8;//Excel 2003版本//if (System.IO.Path.GetExtension(fileName).ToLower() == ".xlsx") version = Excel.XlFileFormat.xlOpenXMLWorkbook;//Excel 2007版本//xSheet.SaveAs(fileName, version, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);rng3 = null;xSheet = null;xBook = null;xApp.Workbooks.Close();xApp.Quit(); //这一句是非常重要的,否则Excel对象不能从内存中退出xApp = null;//this.Load += new System.EventHandler(this.Page_Load);}catch (System.Exception ex){Label1.Text = "ERROR";Response.Write(ex.Message + "ERROR1");}}=============================================== ============================================将Excel操作总结如下://创建Application对象Excel.Excel.XlFileFormat version =Excel.Excel.XlFileFormat.xlExcel8;//Excel 2003版本//if (System.IO.Path.GetExtension(fileName).ToLower() == ".xlsx") version = Excel.Excel.XlFileFormat.xlOpenXMLWorkbook;//Excel 2007版本Excel.Excel.Application xApp = new Excel.Excel.Application();xApp.Visible = true;//得到WorkBook对象, 可以用两种方式之一: 下面的是打开已有的文件Excel.Excel.Workbook xBook =xApp.Workbooks._Open("D:\\JiaBanDaoXiu.xlt",Missing.Value, Missing.Value, Missing.Value, Missing.Value,Missing.Value, Missing.Value, Missing.Value, Missing.Value,Missing.Value, Missing.Value, Missing.Value, Missing.Value);//xBook=xApp.Workbooks.Add(Missing.Value);//新建文件的代码//指定要操作的Sheet,两种方式:Excel.Excel.Worksheet xSheet =(Excel.Excel.Worksheet)xBook.Sheets[1];//Excel.Excel.Worksheet xSheet=(Excel.Worksheet)xApp.ActiveSheet;////读取数据,通过Range对象//Excel.Range rng1 = xSheet.get_Range("A1", Type.Missing);//Console.WriteLine(rng1.Value2);////读取,通过Range对象,但使用不同的接口得到Range//Excel.Range rng2 = (Excel.Range)xSheet.Cells[3, 1];//Console.WriteLine(rng2.Value2);//写入数据Excel.Excel.Range rng3 = xSheet.get_Range("C6", Missing.Value);rng3.Value2 = Label1.Text;rng3.Interior.ColorIndex = 6; //设置Range的背景色//保存方式一:保存WorkBookif (File.Exists("D:\\CData.xls"))File.Delete("D:\\CData.xls");xBook.SaveAs(@"D:\CData.xls",Missing.Value , Missing.Value, Missing.Value, Missing.Value, Missing.Value,Excel.Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value,Missing.Value, Missing.Value);////保存方式二:保存WorkSheet//xSheet.SaveAs(@"D:\CData12.xls",//Missing.Value, Missing.Value, Missing.Value, Missing.Value,//Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);////保存方式三xBook.Save();xSheet = null;xBook = null;xApp.Quit(); //这一句是非常重要的,否则Excel对象不能从内存中退出xApp = null;。
c语言读取csv文件和c++读取csv文件示例分享
c语⾔读取csv⽂件和c++读取csv⽂件⽰例分享C读取csv⽂件复制代码代码如下:#include <stdio.h>#include <string.h>char *trim(char *str){char *p = str;while (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n')p ++;str = p;p = str + strlen(str) - 1;while (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n')-- p;*(p + 1) = '\0';return str;}int main(){FILE *fp = fopen("test.csv", "r");if(fp == NULL) {return -1;}char line[1024];while(fgets(line, sizeof(line), fp)) {//printf("%s", line);char *save_ptr;char *name = strtok_r(line, ",", &save_ptr);if (name == NULL) {return -1;}char *age = strtok_r(NULL, ",", &save_ptr);char *birthday = strtok_r(NULL, ",", &save_ptr);printf("%s\t%s\t%s\n", trim(name), trim(age), trim(birthday));}return 0;}C++读取csv⽂件复制代码代码如下:#include <iostream>#include <fstream>#include <sstream>#include <string>#include <vector>using namespace std;string Trim(string& str){str.erase(0,str.find_first_not_of(" \t\r\n"));str.erase(str.find_last_not_of(" \t\r\n") + 1);return str;}int main(){ifstream fin("test.csv");string line;while (getline(fin, line)) {//cout << line << endl;istringstream sin(line);vector<string> fields;string field;while (getline(sin, field, ',')) {fields.push_back(field);}string name = Trim(fields[0]);string age = Trim(fields[1]);string birthday = Trim(fields[2]);cout << name << "\t" << age << "\t" << birthday << endl; }}csv⽂件复制代码代码如下:alice, 22, 1992/03/05bob, 33, 1981/11/21cart, 40, 1974/07/13。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CVS
string savePath = Server.MapPath("./") + "Upload\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + FileUpload1.FileName;
if (File.Exists(savePath))
{
File.Delete(savePath);//如果文件已经存在就将已存在的文件删除
}
FileUpload1.SaveAs(savePath);
DataTable mycsvdt = new DataTable();
int intColCount = 0;
bool blnFlag = true;
DataColumn mydc;
DataRow mydr;
string strline;
string[] aryline;
StreamReader mysr = new StreamReader(savePath, System.Text.Encoding.Default);
int rows = 0;
while ((strline = mysr.ReadLine()) != null)
{
rows++;
aryline = strline.Split(new char[] { ',' });
//给datatable加上列名
if (blnFlag)
{
blnFlag = false;
intColCount = aryline.Length;
for (int i = 0; i < aryline.Length; i++)
{
mydc = new DataColumn(aryline[i].ToString().Trim('"'));
mycsvdt.Columns.Add(mydc);
}
}
if (rows != 1)
{
//填充数据并加入到datatable中
mydr = mycsvdt.NewRow();
for (int i = 0; i < intColCount; i++)
{
mydr[i] = aryline[i].ToString ().Trim ('"');
}
mycsvdt.Rows.Add(mydr);
}
}
GridView1.DataSource = mycsvdt;
GridView1.DataBind();
Excel
string savePath = Server.MapPath("./") + "Excel\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + Fup.FileName;
if (File.Exists(savePath))
{
File.Delete(savePath);//如果文件已经存在就将已存在的文件删除
}
Fup.SaveAs(savePath);
string strcon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + savePath + ";Extended Properties='Excel 8.0;HDR=NO;'";
OleDbConnection con = new OleDbConnection(strcon);
con.Open();
string sheetnamne = "Content$";
OleDbDataAdapter oda = new OleDbDataAdapter("select * from[" + sheetnamne + "]", con);
DataTable ds = new System.Data.DataTable();
oda.Fill(ds);。