PS : 用到spire庫,.net控制台應用程序
其實本來沒打算寫這個工具的,只是最近需要用到,手頭上正好沒有這樣的工具,那么怎么辦,寫唄!
其實說白了就是省事,策划想怎么玩,把表把工具丟給他,省得策划兩分鍾來拍一次你的后背,哈哈哈!
下面附上代碼,注釋得很清楚,我挑需要注意的說一下就好...
1 using System;
2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.IO; 7 using Spire.Xls; 8 using Spire.Xls.Collections; 9 10 namespace ExcelTools 11 { 12 class Program 13 { 14 /// <summary> 15 /// 程序入口 16 /// </summary> 17 /// <param name="args"></param> 18 static void Main(string[] args) 19 { 20 try 21 { 22 //exe同級目錄下的pathconfig配置文件 23 string dataPath = Directory.GetCurrentDirectory() + @"\PathConfig.txt"; 24 //用流方式讀取配置文件 25 StreamReader streamReader = new StreamReader(dataPath); 26 //因為只設置了一行,用逗號隔開,所以只讀一行 27 string msg = streamReader.ReadLine(); 28 //將兩個路徑分開 29 string[] getPath = msg.Split(','); 30 //第一個是輸入路徑 31 string inPath = getPath[0]; 32 //第二是輸出路徑 33 string outPath = getPath[1]; 34 //讀完后關閉加載器 35 streamReader.Close(); 36 Console.WriteLine("文件路徑:" + inPath); 37 Console.WriteLine("轉換存放路徑:" + outPath); 38 List<string> xlsPathList = new List<string>();//用來接指定文件路徑 39 List<string> tmpList = new List<string>();//遞歸過渡緩存 40 //拿到指定xls路徑列表 41 xlsPathList = GetAllXls(inPath, tmpList); 42 //遍歷轉換 43 for (int i = 0; i < xlsPathList.Count; i++) 44 { 45 Console.WriteLine(string.Format("開始轉換{0}...", xlsPathList[i])); 46 StartConver(xlsPathList[i], outPath); 47 } 48 Console.WriteLine("全部轉換已經完成!"); 49 Console.ReadLine(); 50 Console.Clear(); 51 } 52 catch (Exception e) 53 { 54 Console.WriteLine(e.Message); 55 Console.ReadLine(); 56 return; 57 } 58 } 59 /// <summary> 60 /// 開始轉換 61 /// </summary> 62 /// <param name="inPath">指定文件路徑</param> 63 /// <param name="outPath">轉換完成輸出路徑</param> 64 static void StartConver(string inPath, string outPath) 65 { 66 try 67 { 68 Workbook work = new Workbook();//實例化一個對象 69 work.LoadFromFile(inPath);//調用對象方法,加載指定文件 70 WorksheetsCollection sheetArr = work.Worksheets;//拿到這個xls所有的sheet 71 //遍歷所有的sheet 72 for (int i = 0; i < sheetArr.Count; i++) 73 { 74 string printPath = outPath + sheetArr[i].Name + ".csv";//輸出路徑指定命名 75 sheetArr[i].SaveToFile(printPath, ",", Encoding.UTF8);//保存轉換完成的文件到路徑下,設置編碼格式 76 Console.WriteLine(string.Format("轉換完成{0}", sheetArr[i].Name)); 77 } 78 } 79 catch (Exception e) 80 { 81 Console.WriteLine(e.Message); 82 Console.ReadLine(); 83 } 84 } 85 /// <summary> 86 /// 獲取指定路徑下所有指定類型的文件路徑 87 /// </summary> 88 /// <param name="inPath">指定文件夾路徑</param> 89 /// <param name="fileList">路徑列表</param> 90 /// <returns></returns> 91 static List<string> GetAllXls(string inPath, List<string> fileList) 92 { 93 string fileName; 94 DirectoryInfo dir = new DirectoryInfo(inPath);//實例化路徑對象 95 FileInfo[] fil = dir.GetFiles();//從對象上拿到所有的文件列表 96 DirectoryInfo[] dii = dir.GetDirectories();//得到當前路徑的所有子目錄 97 //遍歷文件列表,拿到指定類型文件 98 foreach (FileInfo f in fil) 99 { 100 fileName = f.FullName; 101 if (fileName.EndsWith("xls")) 102 { 103 fileList.Add(fileName); 104 } 105 } 106 //這里是遞歸,用來拿到子目錄里面還有文件里面的指定文件 107 foreach (DirectoryInfo d in dii) 108 { 109 GetAllXls(d.FullName, fileList); 110 } 111 return fileList; 112 } 113 } 114 }
(1)路勁問題
你要轉文件,肯定得有一個起點一個終點,不推薦在代碼里面寫死路徑,這樣可以保證通用性,我寫得比較懶,直接把兩個路徑寫成配置文件,間接明了
這里需要注意的是,stream這些文件流在使用完成后必須關閉;Directory.GetCurrentDirectory() 這個就是你的exe所在文件夾路徑
(2)用遞歸去獲取xls文件是為了防止有些表分類很細很細,這里也是寫死了是xls
(3)到這里轉換就需要用到spire庫,主要的轉換功能就在它,就在它,就在它!重要的事情說三遍
(3)最后就可以運行了,我是直接轉到unity里讀取,當然你也可以再繼續轉成json文件放到unity里,其實都是一樣的