无论你做什么软件,都需要和数据打交道,也肯定会把数据导入或导出,其中就包括对CSV文件的操作。比如某个平台的数据是CSV文件,我们需要把它导入到程序里。今天就实现这个需求,我们支持2种CSV文件格式。
CSV文件格式1
这种格式是文本文件,每行一条数据,列之间用逗号表示,列值还会出现双引号。这种如果直接循环读取文本文件也可以,也可以用现成的类实现。在Nuget中搜索:CSVHelper,找到后引用进来。
CSV文件格式
Make,Model,Type,Year,Price,Comment "Toyota1",Corolla1,Car1,1990,2000.99,"Comment1 with a,line break and "" quotes" "Toyota2",Corolla2,Car2,1991,2001.99,"Comment2 with a,line break and "" quotes" "Toyota3",Corolla3,Car3,1992,2002.99,"Comment3 with a,line break and "" quotes" "Toyota4",Corolla4,Car4,1993,2003.99,"Comment4 with a,line break and "" quotes"
实现代码
还是比较简单的,感觉像json字符串转Model类
string csvFile1 = @"d:\test-csv.txt"; using (TextReader reader1 = new StreamReader(csvFile1)) { CultureInfo culture = CultureInfo.CurrentCulture; var csvReader1 = new CsvReader(reader1, culture); var records = csvReader1.GetRecords<AutoMobileModel>().ToList(); foreach (var r in records) { Console.WriteLine(r.ToString()); } }
CSV文件格式2
这种格式,类似于Excel文件,需要用Office打开。这种格式如果再用上面的类是解析不了的,这里引用另一个组件,它就是Aspose.Cells组件。相当好用的,除解析Excel文件外,还能解析CSV文件
CSV文件格式
实现代码
string csvFile2 = @"d:\test-csv.csv"; Aspose.Cells.Workbook wb = new Aspose.Cells.Workbook(csvFile2); Aspose.Cells.Worksheet ws = wb.Worksheets[0]; DataTable dtData = new DataTable(); //生成DataTable对象表结构,即获取第一行单元格值 int colCount = ws.Cells.MaxColumn + 1; for (int j = 0; j < colCount; j++) { object colName = ws.Cells[0, j].Value; if (StringHelper.ObjectIsNullOrEmpty(colName)) { colName = "ColName" + (j + 1).ToString(); } dtData.Columns.Add(colName.ToString().Trim(), typeof(string)); } //填充数据 int rowCount = ws.Cells.MaxDataRow + 1; if (rowCount > 0) { for (int m = 1; m < rowCount; m++) { DataRow dataRow = dtData.NewRow(); for (int n = 0; n < colCount; n++) { object cellValue = ws.Cells[m, n].Value; dataRow[n] = cellValue; } dtData.Rows.Add(dataRow); } } int dtRowCount = dtData.Rows.Count; Console.WriteLine("获取到的行个数:" + dtRowCount);
不同格式就用不同代码搞定,没有什么是一段代码解决不了的,如果有就两段
相关阅读
文章评论