概述
- 在日常工作中我们经常会遇到有很多个相同格式的excel文件并需要将他们合并到一个文件中去,要是文件少还好办手动搞一下就好了,但是当需要合并的文件是几千几百个的时候呢?这时我们就需要一个可以自动把相同格式的excel文件合并到一个文件中的工具!
private void MergeExcel()
{
string TileLine = textBox1.Text;
if(TileLine=="")
{
MessageBox.Show("请输入标题的总行数!", "标题总行数为空!");//需要输入标题的总行数,因为格式相同的文件只需要一个标题就行了,只合并内容
}
else
{
Microsoft.Office.Interop.Excel.Application excel = new ApplicationClass();
excel.ScreenUpdating = false; //停止工作表刷新
excel.DisplayAlerts = false;
Workbook workbook = excel.Workbooks.Add(Type.Missing);//合并到此表
Workbook workbook2;
Worksheet worksheet = (Worksheet)workbook.Sheets[1];
worksheet.Name = "合并后表格";
for (int i = 0; i < filename.Length; i++)
{
workbook2 = excel.Workbooks.Open(filename[i]);
Worksheet worksheet2 = (Worksheet)workbook2.ActiveSheet;
if (i == 0)//标题只需要复制一遍
{
Range range;
range = (Range)worksheet.Cells[worksheet.Range["A65536", "A65536"].End[XlDirection.xlUp].Row, 1];
worksheet2.UsedRange.Copy(range);
}
else
{
Range range;
range = (Range)worksheet.Cells[worksheet.Range["A65536", "A65536"].End[XlDirection.xlUp].Row, 1];
worksheet2.UsedRange.Offset[TileLine].Copy(range);
}
workbook2.Close();
// PublicMethod.Kill(excel);//关闭excel进程
}
SaveFileDialog saveExcelDialog = new SaveFileDialog();
saveExcelDialog.Filter = "Excel文件(*.xls;*.xlsx)|*.xls;*.xlsx|所有文件|*.*";
string saveExcelPath="";
if(saveExcelDialog.ShowDialog()==DialogResult.OK)
{
saveExcelPath = saveExcelDialog.FileName;
workbook.SaveAs(saveExcelPath);//保存新建的excel到指定的路径中去
workbook.Close();
excel.Quit();
PublicMethod.Kill(excel);//关闭excel进程
MessageBox.Show("合并表格成功!");
}
else
{
MessageBox.Show("保存失败!");
this.Close();
}
}
}
private void SelectExcelFile()//打开对话框选取需要合并的文件
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "Excel文件(*.xls;*.xlsx)|*.xls;*.xlsx|所有文件|*.*";
dialog.Multiselect = true;
if(dialog.ShowDialog()==DialogResult.OK)
{
filename = dialog.FileNames;
}
}
在程序完成后,打开合并表格的时候发现打不开,后面发现是程序运行时打开的excel进程还没有关闭,因此在程序结束时需要把进程关闭,以下关闭excel进程参考博客:https://blog.csdn.net/spw55381155/article/details/79891108depth_1utm_source=distribute.pc_relevant.nonetask&utm_source=distribute.pc_relevant.none-task
public class PublicMethod//关闭excel进程
{
[DllImport("User32.dll", CharSet = CharSet.Auto)]//导入User32.dll中的函数
public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);//获取指定窗体的进程id
public static void Kill(Microsoft.Office.Interop.Excel.Application excel)
{
IntPtr t = new IntPtr(excel.Hwnd);//得到这个句柄,具体作用是得到这块内存入口
int k = 0;
GetWindowThreadProcessId(t, out k); //得到本进程唯一标志k
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); //得到对进程k的引用
p.Kill(); //关闭进程k
}
}
最后
以上就是文静手机为你收集整理的EXCEL 合并同样格式的多个excel文件的全部内容,希望文章能够帮你解决EXCEL 合并同样格式的多个excel文件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复