700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > C#实现csv文件or xls文件转换为txt格式文件的源码

C#实现csv文件or xls文件转换为txt格式文件的源码

时间:2024-03-08 13:42:42

相关推荐

C#实现csv文件or xls文件转换为txt格式文件的源码

在做C#对接PLC数据写入、采集时,项目有一个环节需要把 csv或xls格式的文件转换为txt格式的文件。

以下是核心源码,未做包装。 聪明的你可以把它写成winform, 但请不要以此为任何商业目的。

using Git.Framework.DataTypes;using Git.Framework.DataTypes.ExtensionMethods;using System;using System.Collections.Generic;using System.Data;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;namespace OPC.PLC.DataType.ConvertLib{class Program{static void Main(string[] args){string paths = AppDomain.CurrentDomain.BaseDirectory;string[] fileNames = Directory.GetFiles(paths);foreach (string file in fileNames){if (Path.GetExtension(file) == ".xls" || Path.GetExtension(file) == ".csv"){string str = Path.GetFileNameWithoutExtension(file);Write(str, file);}}}/// <summary>/// 导出文件/// </summary>/// <param name="DeviceNum"></param>/// <param name="FileName"></param>private static void Write(string DeviceNum, string FileName){NPOIExcel ext = new NPOIExcel();DataTable table = null;if (Path.GetExtension(FileName) == ".xls"){table = ext.Read(FileName, 0);}else if (Path.GetExtension(FileName) == ".csv"){table = ext.OpenCSV(FileName);}if (table != null && table.Rows.Count > 0){string ExpFile = DeviceNum.Replace(".csv", "") + ".txt";StreamWriter SW = new StreamWriter(ExpFile);int line = 0;foreach (DataRow row in table.Rows){line++;string TagName = row["Tag Name"].ToString();string Address = row["Address"].ToString();string DataType = row["Data Type"].ToString();TagName = TagName.IsEmpty() ? "": TagName.Replace("\"", "");Address = Address.IsEmpty() ? "" : Address.Replace("\"", "");DataType = DataType.IsEmpty() ? "" : DataType.Replace("\"", "");SW.WriteLine(string.Format("ItemID={0}", TagName));SW.WriteLine(string.Format("DBBlock={0}", Address));if (DataType.ToLower() == "Boolean".ToLower()){SW.WriteLine(string.Format("DataType={0}", "bool"));}else if (DataType.ToLower() == "Boolean Array".ToLower()){SW.WriteLine(string.Format("DataType={0}", "bool[]"));}else if (DataType.ToLower() == "Float".ToLower()){SW.WriteLine(string.Format("DataType={0}", "float"));}else if (DataType.ToLower() == "Float Array".ToLower()){SW.WriteLine(string.Format("DataType={0}", "float[]"));}else if (DataType.ToLower() == "String".ToLower()){SW.WriteLine(string.Format("DataType={0}", "string"));}else if (DataType.ToLower() == "DWord".ToLower()){SW.WriteLine(string.Format("DataType={0}", "int"));}else if (DataType.ToLower() == "Word".ToLower()){SW.WriteLine(string.Format("DataType={0}", "int"));}else if (DataType.ToLower() == "Short".ToLower()){SW.WriteLine(string.Format("DataType={0}", "int"));}else if (DataType.ToLower() == "DWord Array".ToLower()){SW.WriteLine(string.Format("DataType={0}", "int[]"));}else if (DataType.ToLower() == "Word Array".ToLower()){SW.WriteLine(string.Format("DataType={0}", "int[]"));}else{SW.WriteLine(string.Format("DataType={0}", "string"));}string PropName = TagName;if (TagName.IndexOf("[") > 0){PropName = PropName.SubStr(0, TagName.IndexOf("["));}PropName = PropName.Replace(DeviceNum, "Prop");SW.WriteLine(string.Format("PropName={0}", PropName));//SW.WriteLine(string.Format("SendToServer={0}", SendToServer));//SW.WriteLine(string.Format("TargetTag={0}", TargetTag));//SW.WriteLine(string.Format("RefTag={0}", RefTag));if (line < table.Rows.Count){SW.WriteLine("#");}else{SW.Write("#");}}SW.Flush();SW.Close();}}}}

/// <summary>/// 读取Excel到DataTable/// </summary>/// <param name="filePath"></param>/// <returns></returns>public DataTable Read(string filePath, int sheetIndex){FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate);HSSFWorkbook workbook = new HSSFWorkbook(fs);ISheet sheet1 = workbook.GetSheetAt(sheetIndex);DataTable table = new DataTable();IRow row1 = sheet1.GetRow(0);int cellCount = row1.LastCellNum;for (int i = row1.FirstCellNum; i < cellCount; i++){DataColumn column = new DataColumn(row1.GetCell(i).StringCellValue);table.Columns.Add(column);}int rowCount = sheet1.LastRowNum;for (int i = (sheet1.FirstRowNum + 1); i <= sheet1.LastRowNum; i++){IRow row = sheet1.GetRow(i);if (row != null){DataRow dataRow = table.NewRow();for (int j = row.FirstCellNum; j < cellCount; j++){if (row.GetCell(j) != null)dataRow[j] = row.GetCell(j).ToString();}table.Rows.Add(dataRow);}}workbook = null;sheet1 = null;return table;}

/// <summary>/// 将CSV文件的数据读取到DataTable中/// </summary>/// <param name="fileName">CSV文件路径</param>/// <returns>返回读取了CSV数据的DataTable</returns>public DataTable OpenCSV(string filePath){DataTable dt = new DataTable();FileStream fs = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);//StreamReader sr = new StreamReader(fs, Encoding.UTF8);StreamReader sr = new StreamReader(fs, Encoding.Default);//string fileContent = sr.ReadToEnd();//encoding = sr.CurrentEncoding;//记录每次读取的一行记录string strLine = "";//记录每行记录中的各字段内容string[] aryLine = null;string[] tableHead = null;//标示列数int columnCount = 0;//标示是否是读取的第一行bool IsFirst = true;//逐行读取CSV中的数据while ((strLine = sr.ReadLine()) != null){if (IsFirst == true){tableHead = strLine.Split(',');IsFirst = false;columnCount = tableHead.Length;//创建列for (int i = 0; i < columnCount; i++){DataColumn dc = new DataColumn(tableHead[i]);dt.Columns.Add(dc);}}else{aryLine = strLine.Split(',');DataRow dr = dt.NewRow();if (aryLine.Length == 18){for (int j = 0; j < columnCount; j++){if (j == 0){dr[j] = aryLine[j];}else if (j == 1){dr[j] = aryLine[j] + "," + aryLine[j + 1];}else{dr[j] = aryLine[j + 1];}}}else{for (int j = 0; j < columnCount; j++){dr[j] = aryLine[j];}}dt.Rows.Add(dr);}}sr.Close();fs.Close();return dt;}

最后可以生成的txt格式的文件内容格式是根据我们项目中需要的格式来弄的,你可以通过改动来实现你要需要的内容格式。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。