【C#操作Excel】同名Excel放入同一文件夹中,然后合并为同一个Excel文件
近期有对Excel操作的需求,由于都是重复劳动,故分享代码如下,本人也是技术菜鸟没有考虑性能,如果有大牛能够指教就再好不过了
事先电脑中需要安装Excel,然后Vs中引用Microsoft.Office.Interop.Excel;
使用下方代码前请加上using Excel = Microsoft.Office.Interop.Excel;
同名Excel放入同一文件夹中
前提:同种类型Excel文件名的格式都是:A(1)、A(2)这种。
利用正则表达式来分组,代码如下:
1 /// <summary> 2 /// 将同名Excel分组 3 /// </summary> 4 void MoveFile() 5 { 6 //改为你自己的路径 7 string path = @"C:\Users\Reasonable\Desktop\table"; 8 DirectoryInfo root = new DirectoryInfo(path); 9 FileInfo[] files = root.GetFiles(); 10 11 Regex fileRegex = new Regex(@".+(?=\()"); 12 13 foreach (var file in files) 14 { 15 var fileName = fileRegex.Match(file.Name).ToString(); 16 17 var targetPath = $@"{path}\{fileName}"; 18 19 //以文件名创建子目录 20 if (!Directory.Exists(targetPath)) 21 { 22 Directory.CreateDirectory(targetPath); 23 } 24 25 file.MoveTo(Path.Combine(targetPath, file.Name)); 26 } 27 28 Console.Read(); 29 } 30 }
同一文件夹内Excel合并为同一个
前提:由于事先执行了上方分组代码,所以根目录下是没有文件的,如果有需求请自行修改。
最初我是用Excel的宏操作的,但是需要一个个运行,太繁琐,于是还是改为使用C#自动跑。
1 /// <summary> 2 /// 多个excel合并 3 /// </summary> 4 void MergeExcel() 5 { 6 //改为你自己的路径 7 string path = @"C:\Users\Reasonable\Desktop\table"; 8 DirectoryInfo root = new DirectoryInfo(path); 9 //获取所有子目录 10 var dires = root.GetDirectories(); 11 foreach (var dir in dires) 12 { 13 Excel.Application app = new Excel.Application(); 14 Excel._Workbook result = app.Workbooks.Add(); 15 //获取子目录的文件 16 FileInfo[] files = dir.GetFiles(); 17 18 foreach (var file in files) 19 { 20 Excel._Workbook wb1 = app.Workbooks.Open(Path.GetFullPath(file.FullName)); 21 foreach (Excel._Worksheet each in wb1.Sheets) 22 { 23 each.Copy(result.Worksheets[1]); 24 } 25 wb1.Close(); 26 } 27 result.SaveAs($@"{dir.FullName}\new.xlsx"); 28 app.Quit(); 29 } 30 }