using System; using System.Collections.Generic; using System.Data; using System.Data.OleDb; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using Microsoft.Office.Core; using Excel = Microsoft.Office.Interop.Excel; namespace excel_test { class Program { // 获得字段的实际最大长度 static int GetMaxLength(DataTable dt, string captionName) { DataColumn maxLengthColumn = new DataColumn(); maxLengthColumn.ColumnName = "MaxLength"; maxLengthColumn.Expression = String.Format("len(convert({0},‘System.String‘))", captionName); dt.Columns.Add(maxLengthColumn); object maxLength = dt.Compute("max(MaxLength)", "true"); dt.Columns.Remove(maxLengthColumn); return Convert.ToInt32(maxLength); } static void convertExcelToTxt(string inputFile, string outputPath) { string newFileName = Path.GetFileNameWithoutExtension(inputFile) + ".txt"; string newFile = outputPath + "\\" +newFileName; Console.WriteLine("Convert file[{0}] to [{1}]", inputFile, newFile); FileStream fs = new FileStream(newFile, FileMode.OpenOrCreate); StreamWriter sw = new StreamWriter(fs); var conn = new OleDbConnection(); conn.ConnectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;" + @"Data Source={0}" + ";Extended Properties=\"Excel 12.0 Xml;HDR=No\"", inputFile); conn.Open(); OleDbDataAdapter da = new OleDbDataAdapter("select * from [Sheet1$]", conn); var ds = new DataSet(); da.Fill(ds); var tb1 = ds.Tables[0]; foreach (DataRow row in tb1.Rows) { for (int j = 0; j < tb1.Columns.Count; ++j) { DataColumn col = tb1.Columns[j]; string fmt = String.Format("{0}0,-{1}{2}", "{", GetMaxLength(tb1, col.Caption) + 2, "}"); sw.Write(fmt, row[j]); Console.Write(fmt, row[j]); } sw.WriteLine(); Console.WriteLine(); } sw.Close(); } static int Main(string[] args) { if(args.Length < 1) { Console.WriteLine("No input file arg."); return -1; } string inputFile = args[0]; if (!File.Exists(inputFile)) { Console.WriteLine("No input file exist, {0}", inputFile); return -1; } string fileName = Path.GetFileName(inputFile); string outputPath; if (args.Length > 1) { outputPath = args[1]; } else { outputPath = Path.GetDirectoryName(inputFile); } if (!Directory.Exists(outputPath)) { Console.WriteLine("Output directory not exist, {0}.", outputPath); return -1; } convertExcelToTxt(inputFile, outputPath); return 0; } } }
参考:
1. 【C#读取Excel 2010】,汪宇杰
2. 【C#格式化字符串中转义大括号“{}”】, ^_^肥仔John
3. 【浅谈 DataSet 的用法】
时间: 2024-10-02 10:55:50