精华内容
下载资源
问答
  • 如何把几个Excel文件合并在一起

    千次阅读 2020-05-12 21:49:05
    如何把几个Excel文件合并在一起#### 几个Excel文件内的数据格式都差不多,现在我们需要把它们合并在一个Excel表格当中。 新建一个Excel文件 右键单击Sheet1,选择“查看代码” 在对话框中输入以下代码 sub 合并当前...

    如何把几个Excel文件合并在一起####

    几个Excel文件内的数据格式都差不多,现在我们需要把它们合并在一个Excel表格当中。

    1. 新建一个Excel文件
    2. 右键单击Sheet1,选择“查看代码”
    3. 在对话框中输入以下代码
      sub 合并当前目录下所有工作簿的全部工作表()
      dim mypath, myname, awbname
      dim wb as workbook, wbn as string
      dim g as long
      dim num as long
      dim box as string
      application.screenupdating = false
      mypath = activeworkbook.path
      myname = dir(mypath & “” & “*.xls”)
      awbname = activeworkbook.name
      num = 0
      do while myname <> “”
      if myname <> awbname then
      set wb = workbooks.open(mypath & “” & myname)
      num = num + 1
      with workbooks(1).activesheet
      .cells(.range(“a65536”).end(xlup).row + 2, 1) = left(myname, len(myname) - 4)
      for g = 1 to sheets.count
      wb.sheets(g).usedrange.copy .cells(.range(“a65536”).end(xlup).row + 1, 1)
      next
      wbn = wbn & chr(13) & wb.name
      wb.close false
      end with
      end if
      myname = dir
      loop
      range(“a1”).select
      application.screenupdating = true
      msgbox “共合并了” & num & “个工作薄下的全部工作表。如下:” & chr(13) & wbn, vbinformation, “提示”
      end sub
    4. 点击“运行”→点击“运行子过程/用户窗体”
    5. 等待即可
    展开全文
  • 个excel文件合并为:一个excel的多个sheet页【方法技巧】 大家平时在进行excel表格文件处理时,经常碰到需要多个excel文件合并成一个excel表格文挡,并且每个文档都保存在一个单独的sheet工作表中,一个一个的...

    将多个excel文件合并为:一个excel文件的多个sheet页【方法技巧】

    大家平时在进行excel表格文件处理时,经常碰到需要多个excel文件合并成一个excel表格文挡,并且每个文档都保存在一个单独的sheet工作表中,一个一个的复制粘贴又费时又费力
    不过,由于excel支持VBA代码操作,了解了VBA代码之后,发现利用VBA代码进行这些操作简直不能更简单,效果如下。

    方法步骤

    1、新建一个文件夹,将需要合并的excel文档复制到该文档目录下。

    在这里插入图片描述

    2、新建一个EXCEL空白文档,鼠标移动到在sheet工作表上单击右键,选择“查看代码”选项,进入VBA控制台。

    在这里插入图片描述

    3、在菜单栏点击“插入”菜单,选择“模块”选项,进入模块编辑界面。

    在这里插入图片描述

    4、在编辑框中复制以下代码,注意符号,需是英文状态下。

    '功能:把多个excel工作簿的第一个sheet工作表合并到一个excel工作簿的多个sheet工作表,新工作表的名称等于原工作簿的名称
    Sub Books2Sheets()
        '定义对话框变量
        Dim fd As FileDialog
        Set fd = Application.FileDialog(msoFileDialogFilePicker)
        '新建一个工作簿
        Dim newwb As Workbook
        Set newwb = Workbooks.Add
        
        With fd
            If .Show = -1 Then
                '定义单个文件变量
                Dim vrtSelectedItem As Variant
                '定义循环变量
                Dim i As Integer
                i = 1
                
                '开始文件检索
                For Each vrtSelectedItem In .SelectedItems
                    '打开被合并工作簿
                    Dim tempwb As Workbook
                    Set tempwb = Workbooks.Open(vrtSelectedItem)
                    '复制工作表
                    tempwb.Worksheets(1).Copy Before:=newwb.Worksheets(i)
                    '把新工作簿的工作表名字改成被复制工作簿文件名,这儿应用于xls文件,即Excel97-2003的文件,如果是Excel2007,需要改成xlsx
                    newwb.Worksheets(i).Name = VBA.Replace(tempwb.Name, ".xlsx", "")
                    '关闭被合并工作簿
                    tempwb.Close SaveChanges:=False
                    i = i + 1
                    Next vrtSelectedItem
              End If
          End With
          Set fd = Nothing
    End Sub
    

    5、代码输入后,点击菜单项中“运行”,选择“运行子过程”选项,或者按下F5快捷键,运行代码。

    在这里插入图片描述

    6、运行代码后,会弹出文档选择界面,找到新建文件夹的路径,选择你所需要合并的文档,选择文档后,点击“确定”,代码开始运行,运行时间视文档数目而定。

    在这里插入图片描述

    7、代码段运行结束后,就会出现已经合并完成的excel文档界面,新工作表的名称等于原工作簿的名称,大功告成!

    在这里插入图片描述

    展开全文
  • 利用Python个excel文件合并为一个文件

    万次阅读 多人点赞 2017-07-06 01:08:14
    利用python xlrd包读取excle文件,然后文件内容存入一列表中,再利用xlsxwriter内容写入到一新的excel文件中。

    利用Python,将多个excel文件合并为一个文件

    思路
    利用python xlrd包读取excle文件,然后将文件内容存入一个列表中,再利用xlsxwriter将内容写入到一个新的excel文件中。

    完整代码

    # -*- coding: utf-8 -*-
    
    #将多个Excel文件合并成一个
    import xlrd
    import xlsxwriter
    
    #打开一个excel文件
    def open_xls(file):
        fh=xlrd.open_workbook(file)
        return fh
    
    #获取excel中所有的sheet表
    def getsheet(fh):
        return fh.sheets()
    
    #获取sheet表的行数
    def getnrows(fh,sheet):
        table=fh.sheets()[sheet]
        return table.nrows
    
    #读取文件内容并返回行内容
    def getFilect(file,shnum):
        fh=open_xls(file)
        table=fh.sheets()[shnum]
        num=table.nrows
        for row in range(num):
            rdata=table.row_values(row)
            datavalue.append(rdata)
        return datavalue
    
    #获取sheet表的个数
    def getshnum(fh):
        x=0
        sh=getsheet(fh)
        for sheet in sh:
            x+=1
        return x
    
    
    if __name__=='__main__':
        #定义要合并的excel文件列表
        allxls=['F:/test/excel1.xlsx','F:/test/excel2.xlsx']
        #存储所有读取的结果
        datavalue=[]
        for fl in allxls:
            fh=open_xls(fl)
            x=getshnum(fh)
            for shnum in range(x):
                print("正在读取文件:"+str(fl)+"的第"+str(shnum)+"个sheet表的内容...")
                rvalue=getFilect(fl,shnum)
        #定义最终合并后生成的新文件
        endfile='F:/test/excel3.xlsx'
        wb1=xlsxwriter.Workbook(endfile)
        #创建一个sheet工作对象
        ws=wb1.add_worksheet()
        for a in range(len(rvalue)):
            for b in range(len(rvalue[a])):
                c=rvalue[a][b]
                ws.write(a,b,c)
        wb1.close()
        print("文件合并完成")
    

    源文件excel1:

    这里写图片描述这里写图片描述

    源文件excel2:
    这里写图片描述这里写图片描述
    这里写图片描述

    运行结果:

    这里写图片描述

    合并后的excel3:
    这里写图片描述

    展开全文
  • 12个excel文件合并为一个总excel文件。首先想的思路是读取每个excel文件的sheet然后再copy到总excel文件里,查阅了前辈写的POI工具类,最后生成成功。但逐次打开12个excle文件效率很低,耗时9s,决定换其他思路...

    参考:
    http://blog.csdn.net/wutbiao/article/details/8696446
    项目中需求:
    将12个excel文件合并为一个总excel文件。首先想的思路是读取每个excel文件的sheet然后再copy到总excel文件里,查阅了前辈写的POI工具类,最后生成成功。但逐次打开12个excle文件效率很低,耗时9s,决定换其他思路开发。现将此工具类代码暂放,以后再学习使用。

    import java.util.Iterator;
    import org.apache.poi.ss.usermodel.DateUtil; 
    import org.apache.poi.ss.util.CellRangeAddress;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFCellStyle;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    
    public class POIUtils {
    	public class XSSFDateUtil extends DateUtil {  
    	     
    	}  
    	public static void copyCellStyle(XSSFCellStyle fromStyle, XSSFCellStyle toStyle) {
    		
    		toStyle.cloneStyleFrom(fromStyle);//此一行代码搞定
    		//下面统统不用
    		/*
    		//对齐方式
            toStyle.setAlignment(fromStyle.getAlignment());  
            //边框和边框颜色  
            toStyle.setBorderBottom(fromStyle.getBorderBottom());  
            toStyle.setBorderLeft(fromStyle.getBorderLeft());  
            toStyle.setBorderRight(fromStyle.getBorderRight());  
            toStyle.setBorderTop(fromStyle.getBorderTop());  
            toStyle.setTopBorderColor(fromStyle.getTopBorderColor());  
            toStyle.setBottomBorderColor(fromStyle.getBottomBorderColor());  
            toStyle.setRightBorderColor(fromStyle.getRightBorderColor());  
            toStyle.setLeftBorderColor(fromStyle.getLeftBorderColor());   
            //背景和前景  
            //toStyle.setFillPattern(fromStyle.getFillPattern());  //填充图案,不起作用,转为黑色  
            toStyle.setFillBackgroundColor(fromStyle.getFillBackgroundColor());  //不起作用
            toStyle.setFillForegroundColor(fromStyle.getFillForegroundColor());  
            toStyle.setDataFormat(fromStyle.getDataFormat());  //数据格式 
            //toStyle.setFont(fromStyle.getFont());  //不起作用
            toStyle.setHidden(fromStyle.getHidden());  
            toStyle.setIndention(fromStyle.getIndention());//首行缩进  
            toStyle.setLocked(fromStyle.getLocked());  
            toStyle.setRotation(fromStyle.getRotation());//旋转  
            toStyle.setVerticalAlignment(fromStyle.getVerticalAlignment());  //垂直对齐
            toStyle.setWrapText(fromStyle.getWrapText()); //文本换行 
            */  
        }  
    	public static void mergeSheetAllRegion(XSSFSheet fromSheet, XSSFSheet toSheet) {//合并单元格
    		int num = fromSheet.getNumMergedRegions();
    		CellRangeAddress cellR = null;
    		for (int i = 0; i < num; i++) {
    			cellR = fromSheet.getMergedRegion(i);
    			toSheet.addMergedRegion(cellR);
    		}
    	} 
    	
    	public static void copyCell(XSSFWorkbook wb,XSSFCell fromCell, XSSFCell toCell) {  
            XSSFCellStyle newstyle=wb.createCellStyle();  
            copyCellStyle(fromCell.getCellStyle(), newstyle);  
            //toCell.setEncoding(fromCell.getEncoding());  
            //样式  
            toCell.setCellStyle(newstyle);   
            if (fromCell.getCellComment() != null) {  
                toCell.setCellComment(fromCell.getCellComment());  
            }  
            // 不同数据类型处理  
            int fromCellType = fromCell.getCellType();  
            toCell.setCellType(fromCellType);  
            if (fromCellType == XSSFCell.CELL_TYPE_NUMERIC) {  
                if (XSSFDateUtil.isCellDateFormatted(fromCell)) {  
                        toCell.setCellValue(fromCell.getDateCellValue());  
                    } else {  
                        toCell.setCellValue(fromCell.getNumericCellValue());  
                    }  
                } else if (fromCellType == XSSFCell.CELL_TYPE_STRING) {  
                    toCell.setCellValue(fromCell.getRichStringCellValue());  
                } else if (fromCellType == XSSFCell.CELL_TYPE_BLANK) {  
                    // nothing21  
                } else if (fromCellType == XSSFCell.CELL_TYPE_BOOLEAN) {  
                    toCell.setCellValue(fromCell.getBooleanCellValue());  
                } else if (fromCellType == XSSFCell.CELL_TYPE_ERROR) {  
                    toCell.setCellErrorValue(fromCell.getErrorCellValue());  
                } else if (fromCellType == XSSFCell.CELL_TYPE_FORMULA) {  
                    toCell.setCellFormula(fromCell.getCellFormula());  
                } else { // nothing29  
                }  
              
        }  
    
    	public static void copyRow(XSSFWorkbook wb,XSSFRow oldRow,XSSFRow toRow){  
    		toRow.setHeight(oldRow.getHeight());
            for (Iterator cellIt = oldRow.cellIterator(); cellIt.hasNext();) {  
                XSSFCell tmpCell = (XSSFCell) cellIt.next();  
                XSSFCell newCell = toRow.createCell(tmpCell.getColumnIndex());  
                copyCell(wb,tmpCell, newCell);  
            }  
        }  
    	public static void copySheet(XSSFWorkbook wb,XSSFSheet fromSheet, XSSFSheet toSheet) {   
    		mergeSheetAllRegion(fromSheet, toSheet);     
    		//设置列宽
            for(int i=0;i<=fromSheet.getRow(fromSheet.getFirstRowNum()).getLastCellNum();i++){ 
            	toSheet.setColumnWidth(i,fromSheet.getColumnWidth(i)); 
            } 
            for (Iterator rowIt = fromSheet.rowIterator(); rowIt.hasNext();) {  
                XSSFRow oldRow = (XSSFRow) rowIt.next(); 
                XSSFRow newRow = toSheet.createRow(oldRow.getRowNum()); 
                copyRow(wb,oldRow,newRow);  
            }  
        }  
    	
    	
    }
    
    

    业务层处理:

    //将所有类型的尽调excel文件合并成一个excel文件
    XSSFWorkbook newExcelCreat = new XSSFWorkbook(); 
    for(String fromExcelName:fileNameList) {//遍历每个源excel文件,fileNameList为源文件的名称集合
    	 InputStream in = new FileInputStream(tempUrl+ File.separator +fromExcelName);
    	 XSSFWorkbook fromExcel = new XSSFWorkbook(in);
    	 for(int i = 0; i < fromExcel.getNumberOfSheets(); i++) {//遍历每个sheet
    		 XSSFSheet oldSheet = fromExcel.getSheetAt(i);
    		 XSSFSheet newSheet = newExcelCreat.createSheet(oldSheet.getSheetName()); 
    		 POIUtils.copySheet(newExcelCreat, oldSheet, newSheet);
    	 } 
     }
     String allFileName=tempUrl+File.separator+"总文件_"+format.format(new Date())+".xlsx";
     FileOutputStream fileOut = new FileOutputStream(allFileName);
     newExcelCreat.write(fileOut); 
     fileOut.flush(); 
     fileOut.close();
     //删除各个源文件
     for(String fromExcelName:fileNameList) {//遍历每个源excel文件
    	 File file=new File(tempUrl+File.separator+fromExcelName);
    	 if(file.exists()){
    		 file.delete();
    	 } 
     }
    

    2020.05.14更新博文
     首先不好意思,现在才补充当时的另外一种实现思路。
     因为年代久远,翻了下以前的代码,不知道当时的逻辑是不是解决了效率的问题,各位同学暂且试一下吧。
    思路:
     以上弃用的逻辑是遍历读取每个源excel文件,这样肯定耗时。以下的逻辑是只打开读取一次excel源文件,然后将数据塞入,再写出来。
     1.首先定义一个总Excel的模板:allFiles.xlsx,里面每个sheet名字事先定义好,每个sheet里的内容也和各自对应的子Excel文件内容对应好。
    在这里插入图片描述
     2.拿到业务数据,遍历每条业务记录,根据目标记录的业务类型+在allFiles.xlsx中对应的sheet,调用各自业务的’下载生成Excel’方法,各自业务操作时处理的都是同一个对象XSSFWorkbook
     3.最后将XSSFWorkbook对象写出
     代码如下:

    //1.拿到目标业务数据,封装ddType tableId
    if (fileList != null && fileList.size() > 0) {
       for (int i = 0; i < fileList.size(); i++) {
       	String ddType = fileList.get(i).getProfileType();
       	String tableId = fileList.get(i).getCognateTableId();
       	Map<String,String> map=Maps.newHashMap();
       	map.put("ddType", ddType);//ddType:业务类型
       	map.put("tableId", tableId);//tableId:数据库表某条记录的主键id
       	mapList.add(i,map);
       }
    }
    ...
    //2.遍历每条记录,根据不同的业务类型进行处理
    if (mapList != null && mapList.size() > 0) {
       //2-1.指定总excel的模板文件
       String pathFrom = "/exceltemplates/allFiles.xlsx";   
       @SuppressWarnings("resource")
       XSSFWorkbook fromWorkbook=new XSSFWorkbook(当前类.class.getResourceAsStream(pathFrom)); 
       XSSFWorkbook toWorkbook=new XSSFWorkbook();
       XSSFSheet fromSheet=null;  
       //2-2.遍历,开始生成excle文件的sheet页 
       Map<String,Object> map=new HashMap<String,Object>(); 
       for (int i = 0; i < mapList.size(); i++) {  
       		String ddType = mapList.get(i).get("ddType");
       		String tableId = mapList.get(i).get("tableId");
       		if (ddType.equals("A")) {
       			fromSheet=fromWorkbook.getSheetAt(0);
       			toWorkbook=xxxService.createFile(toWorkbook,fromSheet,tableId);
       		} else if (ddType.equals("B")) {
       			...
       		} 
       		...//省略其他十几个业务类型
       }
    }
    //3.输出总excle文件到tempurl下
    String allDdFilesName = "总文件_" + format.format(new Date()) + ".xlsx";
    FileOutputStream workbookOut = new FileOutputStream(tempUrl + allDdFilesName);
    toWorkbook.write(workbookOut);
    workbookOut.flush();
    workbookOut.close(); 
    ...
    

      其中某一个业务类的生成excle的方法实现:

    public XSSFWorkbook createFile(XSSFWorkbook toWorkbook,XSSFSheet fromSheet,String tableId) throws IOException{  
      	//1.对sheet进行命名
      	XSSFSheet toSheet=toWorkbook.createSheet(); 
      	int sheetAmount=toWorkbook.getNumberOfSheets();
      	int sheetMatchAmount=0;
      	for(int i=0;i<sheetAmount;i++){//遍历sheet
      		if(toWorkbook.getSheetName(i).startsWith("财务报表")){
      			sheetMatchAmount++;
      		}
      	}
      	if(sheetMatchAmount==0){ 
      		toWorkbook.setSheetName(sheetAmount-1, "财务报表_1");
      	}else{ 
      		toWorkbook.setSheetName(sheetAmount-1,"财务报表_"+(sheetMatchAmount+1));
      	}
      	//2.复制源文件sheet框架 
      	POIUtils.copySheet(toWorkbook, fromSheet, toSheet);//调用的还是博文上面的那个工具类
      	//3.根据tableId从数据库中获得数据并封装为map
      	Map<String, Object> paramMap = this.putData(true, tableId);
      	//4.填充数据
      	boolean isData=(boolean)paramMap.get("isData");
          if (isData) {
          	toWorkbook=this.createFile(toWorkbook, toSheet, paramMap);
      	}   
          return toWorkbook;
      }
      
    
    展开全文
  • 1 需要合并的多个excel文件放在同一个文件夹中,新建一个空的excel文件,其放入该文件夹中 2 打开新建的excel文件,all + f11 --------->插入-------模块 3 粘贴代码 '功能:把多个excel工作簿的第一个sh eet...
  • 因工作需要,把上百个excel文件合并成一个excel文件。 失败方案一:一个输入流 + 一个输出流,循环读取源文件然后直接写入目标文件。 这种方案有个问题,流是无记忆的。同一个输入流,读取一个指针自动后移一位,...
  • 怎么把100多个EXCEL文件合并成一个?_EXCEL_电脑软件_编程_天涯问答_天涯社区 http://wenda.tianya.cn/question/3604d101e5cb8330
  • 近期工作过程中,需要对近千同类Excel文件进行合并处理,若纯人工操作会很惆怅,幸好隐约记得,可以通过技术手段解决。 事实上,这近千文件的获取已经不得不纯人工获取,因为研究来研究去都没其他办法,只能哼哧...
  • 把多个EXCEL文件合并成一个,还可以选择合并电子表格中的第几个SHEET进行合并
  • 程序代码如下: ...我自己也新建了几个excel文件来测试,颜色不会出现异常。我不知道是office版本的问题,还是excel文件本身有什么属性是我不知道的。 以上所有的excel文件都是97-03版的xls文件。 请赐教。
  • 所有要合并文件放到同一文件夹下 import pandas as pd import os path = r'C:/files' #指定文件夹路径 wj_List = list(os.walk(path))[0][2] #所有子文件名 xls_file = pd.ExcelFile(path+'\\'+wj_List[0...
  • 在excel中打开宏编辑器,导入这个文件,执行,然后选择多个excel文件,即可个excel文件合并为一个文件
  • 新建一工作表,命名后保存到和与合并的N个文件同一个文件文件夹,按 alt + f11,双击工程资源管理器里面的sheet1(sheet1),在右侧的代码区粘贴如下代码。运行。等候一会就OK了。宏:多个文件表合到一个文件表的多...
  • 网上搜到的合并Excel的教程大多都是合并多个文件到一个sheet,本文是个Excel文件的第一个sheet合并为一个Excel文件中的多个sheet 将要合并的Excel放在同一个文件夹下面,新建一个Excel文件 2. 打开新建的...
  • Excel文件合并到一文件中(多sheet形式),支持03-07office的excel文件 亲测好用哦
  • 如何多个EXCEL表格中的信息合并到一个表格中?多个Excel批量合并的... 或者多个Excel文件合并(相同名称的Sheet表合并) 或者 点击多个Excel按按相同列合并(对齐合并) 注意要使用谷歌浏览器 无需vba,无需...
  • 分享的目的在于让有需要的人知道还有这么个东西可以用因为在学校机关部门工作经常需要汇总各学院数据十个Excel表需要汇总成一个靠复制粘贴估计会慢到怀疑人生因为我太懒所以查了下边分享的这个多个Excel文件快速...
  • 合并表格中,不外乎以下两种情况:个Excel表格文档合并成一个Excel表格个Excel文档中多个工作薄合并成一个工作薄下面我们分情况,来讲解快速合并的方法一、个Excel表格文档合并成一个Excel表格场景...
  • import pandas as pd dates = [ "20200218_v2.csv" , "20200219_v2.csv" , "20200220_v2.csv" , "20200221_v2.csv" ...to_excel ( writer , sheet_name = date ) writer . save ( )
  • 个excel文件内容合并到一个文件中,下面是在其他网站搜到的方法,拿来分享一下,(*^__^*) 嘻嘻……,不过可能要注意要合并的文件和合并到的新文件的版本,我的都是2003的,是可以的哦..... 把所需合并的Excel...
  • excel_path='D:/Documents/Experiments/Results/MDE'#待合并excel文件的目录 res_file='MDE_result'#写入的文件名 write_path=excel_path+'/'+res_file+'.xlsx'#写入的文件路径,与待合并文件处于同一目录 #遍历...
  • 在日常工作中我们经常会遇到有很多相同格式的excel文件并需要他们...这时我们就需要一可以自动把相同格式的excel文件合并到一文件中的工具! private void MergeExcel() { string TileLine = textBox1....
  • 工作中常会遇到合并Excel文件的需求,Excel文件数量不确定,里面的Sheet 数量是可变的,Sheet Name是可变的,所以,需要用到遍历一个文件夹下有几个Excel文件,判断每个 Excel文件有几个Sheet,Sheet name是什么。 ...
  • 合并多个Excel文件可以个Excel文件合并
  • 有时需要相同格式的表格合并为一表格,一打开复制太麻烦了,可以借助Python中的concat函数自动全部合并。 import os import pandas as pd # 将文件读取出来放一列表里面 path = r'E:\dosn2\...
  • excel,多个文件合并到一文件的多sheet
  • 打开Excel文件,启用“开发人员工具” 启用宏和VBA功能 添加3模块 代码如下: Sub 工作薄间工作表合并() 'Dim FileOpen 'Dim X As Integer 'Application.ScreenUpdating = False 'FileOpen = Application....
  • 合并个Excel文件的方法 多个文件内容简单放到一个文件里

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,748
精华内容 7,499
关键字:

将几个excel文件合并