EXCEL:将多个EXCEL文件汇总到一个EXCEL文件
2014-04-27 10:50
337 查看
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Word = Microsoft.Office.Interop.Word; using System.Threading; using office = Microsoft.Office.Core; using System.Reflection; using System.IO; using System.Text.RegularExpressions; using System.Text; using System.Data; using System.Data.OleDb; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindListBox(); txtSavePath.Text = Server.MapPath("~/Target.xls");//初始化文件保存路径 } } protected void btnRead_Click(object sender, EventArgs e) { object missing = System.Reflection.Missing.Value;//定义object缺省值 string[] P_str_Names = new string[ListBox1.Items.Count];//存储所有选择的Excel文件名 for (int i = 0; i < ListBox1.Items.Count; i++) { P_str_Names[i] = ListBox1.Items[i].Value; } string P_str_Name = "";//存储遍历到的Excel文件名 List<string> P_list_SheetNames = new List<string>();//实例化泛型集合对象,用来存储工作表名称 Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();//实例化Excel对象 //打开指定的Excel文件 Microsoft.Office.Interop.Excel.Workbook workbook = excel.Application.Workbooks.Open(txtSavePath.Text, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing); Microsoft.Office.Interop.Excel.Worksheet newWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add(missing, missing, missing, missing);//创建新工作表 for (int i = 0; i < P_str_Names.Length; i++)//遍历所有选择的Excel文件名 { P_str_Name = P_str_Names[i];//记录遍历到的Excel文件名 //指定要复制的工作簿 Microsoft.Office.Interop.Excel.Workbook Tempworkbook = excel.Application.Workbooks.Open(P_str_Name, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing); P_list_SheetNames = GetSheetName(P_str_Name);//获取Excel文件中的所有工作表名 for (int j = 0; j < P_list_SheetNames.Count; j++)//遍历所有工作表 { //指定要复制的工作表 Microsoft.Office.Interop.Excel.Worksheet TempWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)Tempworkbook.Sheets[P_list_SheetNames[j]];//创建新工作表 TempWorksheet.Copy(missing, newWorksheet);//将工作表内容复制到目标工作表中 } Tempworkbook.Close(false, missing, missing);//关闭临时工作簿 } workbook.Save();//保存目标工作簿 workbook.Close(false, missing, missing);//关闭目标工作簿 Response.Write("<script>alert('已经将所有选择的Excel工作表汇总到了一个Excel工作表中!');</script>"); CloseProcess("EXCEL");//关闭所有Excel进程 } protected void btnBrowse_Click(object sender, EventArgs e) { System.Diagnostics.Process.Start(txtSavePath.Text);//打开汇总后的Excel文件 } private void BindListBox() { ListBox1.Items.Clear(); string path = Server.MapPath("~/File"); string[] files = System.IO.Directory.GetFiles(path); foreach (string f in files) { string fileName = System.IO.Path.GetFileName(f); ListItem li = new ListItem(fileName,f); ListBox1.Items.Add(li); } } private List<string> GetSheetName(string P_str_Excel)//获取所有工作表名称 { List<string> P_list_SheetName = new List<string>();//实例化泛型集合对象 //连接Excel数据库 OleDbConnection olecon = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + P_str_Excel + ";Extended Properties=Excel 8.0"); olecon.Open();//打开数据库连接 System.Data.DataTable DTable = olecon.GetSchema("Tables");//实例化表对象 DataTableReader DTReader = new DataTableReader(DTable);//实例化表读取对象 while (DTReader.Read())//循环读取 { string P_str_Name = DTReader["Table_Name"].ToString().Replace('$', ' ').Trim();//记录工作表名称 if (!P_list_SheetName.Contains(P_str_Name))//判断泛型集合中是否已经存在该工作表名称 P_list_SheetName.Add(P_str_Name);//将工作表名添加到泛型集合中 } DTable = null;//清空表对象 DTReader = null;//清空表读取对象 olecon.Close();//关闭数据库连接 return P_list_SheetName;//返回得到的泛型集合 } private void CloseProcess(string P_str_Process)//关闭进程 { System.Diagnostics.Process[] excelProcess = System.Diagnostics.Process.GetProcessesByName(P_str_Process);//实例化进程对象 foreach (System.Diagnostics.Process p in excelProcess) p.Kill();//关闭进程 System.Threading.Thread.Sleep(10);//使线程休眠10毫秒 } }
相关文章推荐
- 使用Python生成Excel格式的图片
- c#调用COM组件
- Excel 曝出 Power Query 安全漏洞,1.2 亿用户易受远程 DDE 攻击
- excel vba 限制工作表的滚动区域代码
- excel vba 高亮显示当前行代码
- Access 2000 数据库 80 万记录通用快速分页类
- c#中虚函数的相关使用方法
- 十万条Access数据表分页的两个解决方法
- 浅析C# web访问mysql数据库-整理归纳总结
- Access中字段上自动打开的输入法的解决方法
- C# IP地址与整数之间转换的具体方法
- Access to SQLserver 数据库生迁脚本编写器(DB_CreateSqlEV1.06下载)
- asp Access数据备份,还原,压缩类代码
- SQL 导入导出Excel数据的语句
- C#中的多态深入理解
- C#实现的阴历阳历互相转化类实例
- C# 的关键字详细介绍
- c# 获得局域网主机列表实例
- C#基本概念列举详解
- C#中Convert.ToInt32()和int.Parse()的区别介绍