精华内容
下载资源
问答
  • excel财务报表条件匹配,数据汇总项目要求主要运用的excel公式具体实现时的思路按条件汇总思路解决困难项标签汇总,用标签汇总其他数据遇到的操作...年度汇总,按月汇总。 表格美化。 主要运用的excel公式 在实现具...

    项目要求

    接手一个excel项目,为一家公司完成财务报表里的具体公式。

    1. 帅选出某一个月内发生的交易,客户,供货商;
    2. 筛选某一客户的全部订单,某一供货商的全部订单,及财务信息;
    3. 年度汇总,按月汇总。
    4. 表格美化。

    主要运用的excel公式

    在实现具体功能时感受到excel公式的强大,既能完成功能,也能美化界面。

    1. =IFERROR(INDEX(采购录入表!C:C,SMALL(IF(采购录入表!$D$4:$D$3000=$G$1,ROW(采购录入表!$D$4:$D$3000)),ROW($B1))),"")
      要同时按下Ctrl +Shift +Enter作为结束
      查询一列中与要求相同的第一项,如果查找出错则返回空,避免出现错误符号;
    2. =IF(INDEX(采购录入表!$D$4:$D$3000,MATCH(0,COUNTIF(B$2:B3,采购录入表!$D$4:$D$3000),)&"")="","",INDEX(采购录入表!$D$4:$D$3000,MATCH(0,COUNTIF(B$2:B3,采购录入表!$D$4:$D$3000),)&""))
    3. 要同时按下Ctrl +Shift +Enter作为结束
      查询一列中的不同项,汇总相同项只能出现一次,运用此公式在下拉时就能完成。
    4. =IFERROR(SUMIFS(采购录入表!G$4:G$3000,采购录入表!$A$4:$A$3000,$G$1,采购录入表!$D$4:$D$3000,$G4),"")
      多条件求和;
    5. =IF(AND(E8="",D8=""),"",F7+D8-E8)
      多条件判断,如果E8,D8表格内都没有数据,则返回空,否则执行加减操作;
    6. 1、2公式组合按条件筛选出不同项。

    具体实现时的思路

    按项目最主要要求,我需要实现在点选月份,客户,供货商时在表格中生成与之对应的信息。起初使用LOOKUP函数查询,但是LOOKUP查找的数组需要按升序排序,否则查找到的结果就会某明奇妙。接着就使用INDEX查询,INDEX查询按照位置查找,不会存在排序问题,所以之后都使用INDEX查询,不会出错。

    =index(array,row_num,column_num) ,其中array表示我们要引用的区域,row_num表示要引用的行数,column_num表示要引用的列数,最终的结果就是引用出区域内行列交叉处的内容。

    我使用时主要查找一列内的内容,所以只需要得到行号就可以。那么接着就要得到具体行号

    SMALL(IF(采购录入表!$D$4:$D$3000=$G$1,ROW(采购录入表!$D$4:$D$3000)),ROW($B1))
    

    用来得到具体行号
    SMALL函数的作用是:在一列数值中,按从小到大的顺序取第n个值。例如:=SMALL(A1:A10,5),意思是,从A1:A10的10个数值,从小到大取第5个。
    ROW函数的含义返回所选择的某一个单元格的行数。

    IF(采购录入表!$D$4:$D$3000=$G$1,ROW(采购录入表!$D$4:$D$3000))
    

    这个数组比较与条件$G$1相同则返回行号,不同就是FALSE。可以输入后按F9看数组比较结果。

    ROW($B1)
    

    结果=1

    SMALL(IF(采购录入表!$D$4:$D$3000=$G$1,ROW(采购录入表!$D$4:$D$3000)),ROW($B1))
    

    这样就返回第一个符合条件的行号。$表示锁定。公式下拉时列号不变行号+1,第二行就返回第二个符合条件的行号。

    =IFERROR(INDEX(采购录入表!C:C,SMALL(IF(采购录入表!$D$4:$D$3000=$G$1,ROW(采购录入表!$D$4:$D$3000)),ROW($B1))),"")
    

    这样就能筛选一列中与标签符合的具体数据。

    按条件汇总思路

    汇总就是要只保留不同标签,相同标签只出现一次。
    =IF(INDEX(采购录入表!$D$4:$D$3000,MATCH(0,COUNTIF(B$2:B2,采购录入表!$D$4:$D$3000),)&"")="","",INDEX(采购录入表!$D$4:$D$3000,MATCH(0,COUNTIF(B$2:B3,采购录入表!$D$4:$D$3000),)&""))
    用于筛选出不同。下面开始具体分析。

    IF目标判断是否为空,是返回空,不是返回本身。

    MATCH 函数可在单元格区域中搜索指定项,然后返回该项在单元格区域中的相对位置。例如,如果单元格区域 A1:A3 包含值 5、25 和 38,则以下公式:=MATCH(25,A1:A3,0)会返回数字 2,因为值 25 是单元格区域中的第二项。

    COUNTIF(区域,条件)条件也可以是数组。
    比如A1至A7单元格中的内容是 1,2,1,2,3,4,1 这样7个数
    COUNTIF(A1:A7,A1:A7)={3,2,3,2,1,1,3} 即意思为在A1至A7单元格区域中,与A1相同的有3个,与A2相同的有2个,与A3相同的有3个,与A4相同的有2个,与A5相同的有1个,与A6相同的有1个,与A7相同的有3个这样的一个数组。
    COUNTIF(B$2:B2,采购录入表!$D$4:$D$3000)
    从第一行下拉就可以增加区域不增加条件,但是区域最后一行会增加上一次匹配到的不同项名称,这样在在执行COUNTIF时结果最后一项最大出现次数最多,在
    MATCH(0,COUNTIF(B$2:B2,采购录入表!$D$4:$D$3000),)
    就把已经出现排除。
    以上就是筛选出不同项,但是没有按条件筛选出不同项。如筛选出某个月下发生过交易的供应商名单。
    我没有想出一个具体解决的公式,但是我用两个公式解决了问题。首先我用公式筛选出某个月下的所有供货商交易的所有交易=IFERROR(INDEX(采购录入表!C:C,SMALL(IF(采购录入表!$D$4:$D$3000=$G$1,ROW(采购录入表!$D$4:$D$3000)),ROW($B1))),"")
    并保存在以固定列中,接着用上一个公式把这列中不同项筛选出来
    =IF(INDEX(采购录入表!$D$4:$D$3000,MATCH(0,COUNTIF(B$2:B2,采购录入表!$D$4:$D$3000),)&"")="","",INDEX(采购录入表!$D$4:$D$3000,MATCH(0,COUNTIF(B$2:B3,采购录入表!$D$4:$D$3000),)&""))

    解决困难项标签汇总,用标签汇总其他数据

    现在我已经把某个月下发生交易供货商名单得到了,现在我要得到他们发生的具体交易额,这就变的比较简单了。

    =IFERROR(SUMIFS(采购录入表!G$4:G$3000,采购录入表!$A$4:$A$3000,$G$1,采购录入表!$D$4:$D$3000,$G4),"")
    

    SUMIFS多条件求和公式,我只需把供货商和月份当作条件就可以。
    SUMIFS(求和列,供货商列,具体供货商,月份列,具体月份)
    数据表格
    数据表格
    汇总表格
    汇总表格

    遇到的操作失误

    对于数组类的公式输入结束后不能直接Enter结束, 要同时按下Ctrl +Shift +Enter作为结束,否则筛选结果会出错。
    对于$的锁行锁列功能要认识清楚。$D$4表示公式下拉时,这个引用位置不变。$D4下拉或上拉时行号会递增或递减,而列号不变。其他情况自己尝试。
    视图里可以关闭网格线,设置在有内容显示的表格里自动增加边框。我百度的网上方法,至今没有成功,只有用格式刷解决一部分。这个问题希望可以找到好的解决办法。

    展开全文
  •  现在有时间分的用户表,要在每一号将这些表的数据汇总到一个excel中。每张表的数据量很大。  昨天通宵搞得,只为纪念,方便以后遇见同样的需求做参考。  之前是想着每天导出一个excel, 然后在月初一起汇总...

    一. 简介

               现在有按时间分的用户表,要在每月一号将这些表的数据汇总到一个excel中。每张表的数据量很大。

               昨天通宵搞得,只为纪念,方便以后遇见同样的需求做参考。

               之前是想着每天导出一个excel, 然后在月初一起汇总。但是合并excel的时候有问题,这样跨表查也挺快的。

    二. 代码

    2.1 Ecxel常量类

    package com.yzx.caasscs.constant;
    
    /**
     * @author duxuebo
     * @date 2018/9/19
     * @description EXCEL常量类
     */
    public class ExcelConstant {
    
        /**
         * 每个sheet存储的记录数 100W
         */
        public static final Integer PER_SHEET_ROW_COUNT = 1000000;
    
        /**
         * 每次向EXCEL写入的记录数(查询每页数据大小) 20W
         */
        public static final Integer PER_WRITE_ROW_COUNT = 200000;
    
    
        /**
         * 每个sheet的写入次数 5
         */
        public static final Integer PER_SHEET_WRITE_COUNT = PER_SHEET_ROW_COUNT / PER_WRITE_ROW_COUNT;
    
    }
    

    2.2 EXCEL写数据委托类

    package com.yzx.caasscs.util;
    
    import org.apache.poi.xssf.streaming.SXSSFSheet;
    
    /**
     * @author duxuebo
     * @date 2018/9/20
     * @description EXCEL写数据委托类
     */
    public interface WriteExcelDataDelegated {
    
        /**
         * EXCEL写数据委托类  针对不同的情况自行实现
         *
         * @param eachSheet     指定SHEET
         * @param startRowCount 开始行
         * @param endRowCount   结束行
         * @param currentPage   分批查询开始页
         * @param pageSize      分批查询数据量
         * @throws Exception
         */
        public abstract void writeExcelData(SXSSFSheet eachSheet, Integer startRowCount, Integer endRowCount, Integer currentPage, Integer pageSize) throws Exception;
    
    
    }
    

    2.3 POI工具类

    package com.yzx.caasscs.util;
    
    
    import com.yzx.caasscs.constant.ExcelConstant;
    import org.apache.poi.xssf.streaming.SXSSFCell;
    import org.apache.poi.xssf.streaming.SXSSFRow;
    import org.apache.poi.xssf.streaming.SXSSFSheet;
    import org.apache.poi.xssf.streaming.SXSSFWorkbook;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import javax.servlet.http.HttpServletResponse;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.Date;
    
    /**
     * @author duxuebo
     * @date 2018/9/18
     * @description POI导出工具类
     */
    public class PoiUtil {
    
        private final static Logger logger = LoggerFactory.getLogger(PoiUtil.class);
    
        /**
         * 初始化EXCEL(sheet个数和标题)
         *
         * @param totalRowCount 总记录数
         * @param titles        标题集合
         * @return XSSFWorkbook对象
         */
        public static SXSSFWorkbook initExcel(Integer totalRowCount, String[] titles) {
    
            // 在内存当中保持 100 行 , 超过的数据放到硬盘中在内存当中保持 100 行 , 超过的数据放到硬盘中
            SXSSFWorkbook wb = new SXSSFWorkbook(100);
    
            Integer sheetCount = ((totalRowCount % ExcelConstant.PER_SHEET_ROW_COUNT == 0) ?
                    (totalRowCount / ExcelConstant.PER_SHEET_ROW_COUNT) : (totalRowCount / ExcelConstant.PER_SHEET_ROW_COUNT + 1));
    
            // 根据总记录数创建sheet并分配标题
            for (int i = 0; i < sheetCount; i++) {
                SXSSFSheet sheet = wb.createSheet("sheet" + (i + 1));
                SXSSFRow headRow = sheet.createRow(0);
    
                for (int j = 0; j < titles.length; j++) {
                    SXSSFCell headRowCell = headRow.createCell(j);
                    headRowCell.setCellValue(titles[j]);
                }
            }
    
            return wb;
        }
    
    
        /**
         * 下载EXCEL到本地指定的文件夹
         *
         * @param wb         EXCEL对象SXSSFWorkbook
         * @param exportPath 导出路径
         * @param fileName   文件名称
         * @return 文件存储路径
         */
        public static String downLoadExcelToLocalPath(SXSSFWorkbook wb, String exportPath, String fileName) {
            FileOutputStream fops = null;
            try {
    
                File dir = new File(exportPath);
                if (!dir.exists()) {
                    dir.mkdirs();
                }
    
                File excelFile = new File(exportPath + "\\" + fileName + ".xlsx");
                if (excelFile.exists()) {
                    excelFile.delete();
                    excelFile.createNewFile();
                }
    
                fops = new FileOutputStream(excelFile);
                wb.write(fops);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (null != wb) {
                    try {
                        wb.dispose();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                if (null != fops) {
                    try {
                        fops.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
    
            return exportPath + "\\" + fileName + ".xlsx";
        }
    
    
        /**
         * 下载EXCEL到浏览器
         *
         * @param wb       EXCEL对象XSSFWorkbook
         * @param response
         * @param fileName 文件名称
         * @throws IOException
         */
        public static void downLoadExcelToWebsite(SXSSFWorkbook wb, HttpServletResponse response, String fileName) throws IOException {
    
            response.setHeader("Content-disposition", "attachment; filename="
                    + new String((fileName + ".xlsx").getBytes("utf-8"), "ISO8859-1"));//设置下载的文件名
    
            OutputStream outputStream = null;
            try {
                outputStream = response.getOutputStream();
                wb.write(outputStream);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (null != wb) {
                    try {
                        wb.dispose();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                if (null != outputStream) {
                    try {
                        outputStream.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
    
        /**
         * 导出Excel到本地指定路径
         *
         * @param totalRowCount           总记录数
         * @param titles                  标题
         * @param exportPath              导出路径
         * @param fileName                文件名称
         * @param writeExcelDataDelegated 向EXCEL写数据/处理格式的委托类 自行实现
         * @throws Exception
         */
        public static final void exportExcelToLocalPath(Integer totalRowCount, String[] titles, String exportPath, String fileName, WriteExcelDataDelegated writeExcelDataDelegated) throws Exception {
    
            logger.info("开始导出:" + DateUtil.formatDate(new Date(), DateUtil.YYYY_MM_DD_HH_MM_SS));
    
            // 初始化EXCEL
            SXSSFWorkbook wb = PoiUtil.initExcel(totalRowCount, titles);
    
            // 调用委托类分批写数据
            int sheetCount = wb.getNumberOfSheets();
            for (int i = 0; i < sheetCount; i++) {
                SXSSFSheet eachSheet = wb.getSheetAt(i);
    
                for (int j = 1; j <= ExcelConstant.PER_SHEET_WRITE_COUNT; j++) {
    
                    int currentPage = i * ExcelConstant.PER_SHEET_WRITE_COUNT + j;
                    int pageSize = ExcelConstant.PER_WRITE_ROW_COUNT;
                    int startRowCount = (j - 1) * ExcelConstant.PER_WRITE_ROW_COUNT + 1;
                    int endRowCount = startRowCount + pageSize - 1;
    
    
                    writeExcelDataDelegated.writeExcelData(eachSheet, startRowCount, endRowCount, currentPage, pageSize);
    
                }
            }
    
    
            // 下载EXCEL
            PoiUtil.downLoadExcelToLocalPath(wb, exportPath, fileName);
    
            logger.info("导出完成:" + DateUtil.formatDate(new Date(), DateUtil.YYYY_MM_DD_HH_MM_SS));
        }
    
    
        /**
         * 导出Excel到浏览器
         *
         * @param response
         * @param totalRowCount           总记录数
         * @param fileName                文件名称
         * @param titles                  标题
         * @param writeExcelDataDelegated 向EXCEL写数据/处理格式的委托类 自行实现
         * @throws Exception
         */
        public static final void exportExcelToWebsite(HttpServletResponse response, Integer totalRowCount, String fileName, String[] titles, WriteExcelDataDelegated writeExcelDataDelegated) throws Exception {
    
            logger.info("开始导出:" + DateUtil.formatDate(new Date(), DateUtil.YYYY_MM_DD_HH_MM_SS));
    
            // 初始化EXCEL
            SXSSFWorkbook wb = PoiUtil.initExcel(totalRowCount, titles);
    
    
            // 调用委托类分批写数据
            int sheetCount = wb.getNumberOfSheets();
            for (int i = 0; i < sheetCount; i++) {
                SXSSFSheet eachSheet = wb.getSheetAt(i);
    
                for (int j = 1; j <= ExcelConstant.PER_SHEET_WRITE_COUNT; j++) {
    
                    int currentPage = i * ExcelConstant.PER_SHEET_WRITE_COUNT + j;
                    int pageSize = ExcelConstant.PER_WRITE_ROW_COUNT;
                    int startRowCount = (j - 1) * ExcelConstant.PER_WRITE_ROW_COUNT + 1;
                    int endRowCount = startRowCount + pageSize - 1;
    
                    writeExcelDataDelegated.writeExcelData(eachSheet, startRowCount, endRowCount, currentPage, pageSize);
    
                }
            }
    
    
            // 下载EXCEL
            PoiUtil.downLoadExcelToWebsite(wb, response, fileName);
    
            logger.info("导出完成:" + DateUtil.formatDate(new Date(), DateUtil.YYYY_MM_DD_HH_MM_SS));
        }
    
    
        /**
         * 创建一个excel
         *
         * @param titles 标题列表
         * @return SXSSFWorkbook
         */
        public static SXSSFWorkbook createExcel(String[] titles) {
    
            SXSSFWorkbook wb = new SXSSFWorkbook(100);
    
            SXSSFSheet sheet = wb.createSheet("sheet0");
            SXSSFRow headRow = sheet.createRow(0);
    
            for (int j = 0; j < titles.length; j++) {
                headRow.createCell(j).setCellValue(titles[j]);
            }
    
            return wb;
        }
    
    
        /**
         * 新增一个sheet
         *
         * @param wb     SXSSFWorkbook
         * @param titles 标题数组
         * @return SXSSFWorkbook
         */
        public static SXSSFWorkbook addSheet(SXSSFWorkbook wb, String[] titles) {
    
            int sheetCount = wb.getNumberOfSheets();
            SXSSFSheet currentSheet = wb.createSheet("sheet" + sheetCount);
            SXSSFRow headRow = currentSheet.createRow(0);
    
            for (int i = 0; i < titles.length; i++) {
                headRow.createCell(i).setCellValue(titles[i]);
            }
    
            return wb;
        }
    
    
        public static void main(String[] args) {
    
            String relativePath = "E:\\temp\\excel";
            String fileName = "test";
            String[] titles = {"姓名", "年龄", "性别"};
    
            SXSSFWorkbook wb = createExcel(titles);
            wb = addSheet(wb, titles);
    
            downLoadExcelToLocalPath(wb, relativePath, fileName);
        }
    
    
    }
    

    2.4 用户VO类

    package com.yzx.caasscs.vo.organiza;
    
    import com.fasterxml.jackson.annotation.JsonFormat;
    import com.fasterxml.jackson.annotation.JsonInclude;
    import com.yzx.caasscs.vo.sys.MenuVO;
    import io.swagger.annotations.ApiModelProperty;
    
    import java.util.Date;
    import java.util.List;
    
    /**
     * @author duxuebo
     * @date 2018/9/3
     * @description 用户VO对象
     */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public class UserVO {
    
        @ApiModelProperty("用户ID")
        private Long uid;
    
        @ApiModelProperty("账号")
        private String username;
    
        @ApiModelProperty("昵称")
        private String nickname;
    
        @ApiModelProperty("职位")
        private String position;
    
        @ApiModelProperty("手机号")
        private String mobile;
    
        @ApiModelProperty("邮箱")
        private String email;
    
       
        @ApiModelProperty("创建时间 格式:yyyy-MM-dd HH:mm:ss")
        private Date createTime;
    
        @ApiModelProperty("日期字符串 yyyyMMdd格式")
        private String Date;
    
       
    }
    

    2.5 用户控制类

    package com.yzx.caasscs.controller.organiza;
    
    import com.yzx.caasscs.controller.BaseController;
    import com.yzx.caasscs.service.organiza.UserService;
    import com.yzx.caasscs.vo.PageVO;
    import com.yzx.caasscs.vo.ResultVO;
    import com.yzx.caasscs.vo.organiza.UserVO;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiImplicitParam;
    import io.swagger.annotations.ApiImplicitParams;
    import io.swagger.annotations.ApiOperation;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    import springfox.documentation.annotations.ApiIgnore;
    
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * @author duxuebo
     * @date 2018/8/30
     * @description 用户控制类
     */
    @Api(tags = {"UserController"}, description = "用户Controller")
    @RestController
    @RequestMapping(value = "/user")
    public class UserController extends BaseController {
    
        @Autowired
        private UserService userService;
    
        // http://localhost:8080/user/send/email
        @GetMapping("/send/email")
        public ResultVO<Void> sendUserEmail(@ApiIgnore UserVO userVO) throws Exception {
            return this.userService.sendUserEmail(userVO);
        }
    
    }
    

    2.6 用户service

    package com.yzx.caasscs.service.organiza;
    
    import com.yzx.caasscs.vo.PageVO;
    import com.yzx.caasscs.vo.ResultVO;
    import com.yzx.caasscs.vo.organiza.UserVO;
    
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * @author duxuebo
     * @date 2018/8/30
     * @description 用户SERVICE
     */
    public interface UserService {
    
        /**
         * 发送用户Email
         * @param userVO
         * @return
         * @throws Exception
         */
        ResultVO<Void> sendUserEmail(UserVO userVO) throws Exception;
    }
    

    2.7 用户serviceImpl

    package com.yzx.caasscs.service.impl.organiza;
    
    import com.github.pagehelper.PageHelper;
    import com.github.pagehelper.PageInfo;
    import com.yzx.caasscs.constant.ExcelConstant;
    import com.yzx.caasscs.constant.middleware.RedisConstant;
    import com.yzx.caasscs.constant.organiza.UserApartmentConstant;
    import com.yzx.caasscs.constant.organiza.UserConstant;
    import com.yzx.caasscs.constant.organiza.UserRoleConstant;
    import com.yzx.caasscs.constant.sys.SysLogConstant;
    import com.yzx.caasscs.entity.dscaasscs.organiza.User;
    import com.yzx.caasscs.entity.dscaasscs.organiza.UserApartment;
    import com.yzx.caasscs.entity.dscaasscs.organiza.UserRole;
    import com.yzx.caasscs.mapper.dscaasscs.organiza.UserApartmentMapper;
    import com.yzx.caasscs.mapper.dscaasscs.organiza.UserMapper;
    import com.yzx.caasscs.mapper.dscaasscs.organiza.UserRoleMapper;
    import com.yzx.caasscs.mapper.dscaasscs.sys.RoleMenuMapper;
    import com.yzx.caasscs.service.organiza.UserService;
    import com.yzx.caasscs.service.sys.SysLogService;
    import com.yzx.caasscs.util.CommonUtil;
    import com.yzx.caasscs.util.DateUtil;
    import com.yzx.caasscs.util.PoiUtil;
    import com.yzx.caasscs.util.WriteExcelDataDelegated;
    import com.yzx.caasscs.vo.PageVO;
    import com.yzx.caasscs.vo.ResultVO;
    import com.yzx.caasscs.vo.organiza.UserApartmentVO;
    import com.yzx.caasscs.vo.organiza.UserRoleVO;
    import com.yzx.caasscs.vo.organiza.UserVO;
    import com.yzx.caasscs.vo.sys.MenuVO;
    import com.yzx.caasscs.vo.sys.RoleMenuVO;
    import com.yzx.caasscs.vo.sys.SysLogVO;
    import net.sf.json.JSONObject;
    import org.apache.poi.xssf.streaming.SXSSFRow;
    import org.apache.poi.xssf.streaming.SXSSFSheet;
    import org.apache.poi.xssf.streaming.SXSSFWorkbook;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    import org.springframework.util.CollectionUtils;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.*;
    
    /**
     * @author duxuebo
     * @date 2018/8/30
     * @description 用户SERVICEIMPL
     */
    @Service
    public class UserServiceImpl implements UserService {
    
        @Autowired
        private UserMapper userMapper;
    
    
        @Override
        public ResultVO<Void> sendUserEmail(UserVO userVO) throws Exception {
    
            System.out.println("开始计时:" + DateUtil.formatDate(new Date(), DateUtil.YYYY_MM_DD_HH_MM_SS));
    
    
            // 有5个运行的任务
            for (int i = 0; i < 1; i++) {
    
                // 1. 创建excel表 并设置标题  excel的名称为任务的主键
                String relativePath = "E:\\temp\\excel\\2018\\09";
                String fileName = i + "";
                String[] titles = {"用户ID", "用户名", "昵称", "手机号", "创建时间"};
                SXSSFWorkbook wb = PoiUtil.createExcel(titles);
    
    
                // 2. 获取当前月份的所有日期格式化字符串集合
                List<String> dateList = new ArrayList<>();
                dateList.add("20180901");
                dateList.add("20180902");
                dateList.add("20180903");
                dateList.add("20180904");
                dateList.add("20180905");
    
    
                // 3. 遍历所有日期的符合条件的话单表获取到总数据量来确定sheet数量 并标记每天的数据量
                Integer totalRowCount = 0;
                Map<String, Integer> dayAndCountMap = new HashMap<>();
                for (String eachDate : dateList) {
                    userVO.setDate(eachDate);
                    Integer eachDayCount = this.userMapper.selectUserDateCount(userVO);
                    dayAndCountMap.put(eachDate, eachDayCount);
                    totalRowCount = totalRowCount + eachDayCount;
                }
    
                Integer sheetCount = totalRowCount % ExcelConstant.PER_SHEET_ROW_COUNT == 0 ?
                        totalRowCount / ExcelConstant.PER_SHEET_ROW_COUNT : (totalRowCount / ExcelConstant.PER_SHEET_ROW_COUNT + 1);
                for (int j = 1; j < sheetCount; j++) {
                    PoiUtil.addSheet(wb, titles);
                }
    
    
                // 4. 将当前月份的日期表全部遍历一遍,并写到excel中
                Integer currentSheetIndex = 0;
                Integer startWriteRowIndex = 1;
    
                for (String eachDate : dateList) {
    
                    userVO.setDate(eachDate);
                    Integer currentDayCount = dayAndCountMap.get(eachDate);
    
                    // 如果当前写的开始行索引 + 当前天的记录数量 大于一个sheet的存储上限,则换到另一个sheet开始写
                    // 注意: 此处要大于+1  例如:50万零1 + 50W > 100W零1的时候才会创建新的sheet
                    if(startWriteRowIndex + currentDayCount > ExcelConstant.PER_SHEET_ROW_COUNT) {
                        currentSheetIndex = currentSheetIndex + 1;
                        startWriteRowIndex = 1;
                    }
    
                    Integer writeCount = currentDayCount % ExcelConstant.PER_WRITE_ROW_COUNT == 0 ?
                            currentDayCount / ExcelConstant.PER_WRITE_ROW_COUNT : (currentDayCount / ExcelConstant.PER_WRITE_ROW_COUNT + 1);
    
                    for (int j = 1; j <= writeCount; j++) {
    
                        if (j != writeCount) {
    
                            PageHelper.startPage(j, ExcelConstant.PER_WRITE_ROW_COUNT);
                            List<UserVO> userVOList = this.userMapper.selectUserDateList(userVO);
    
                            // 写数据
                            writeExcelData(wb, currentSheetIndex, startWriteRowIndex, userVOList);
    
                            startWriteRowIndex = startWriteRowIndex + ExcelConstant.PER_WRITE_ROW_COUNT;
    
                        } else {
                            PageHelper.startPage(j, currentDayCount % ExcelConstant.PER_WRITE_ROW_COUNT);
                            List<UserVO> userVOList = this.userMapper.selectUserDateList(userVO);
    
                            // 写数据
                            writeExcelData(wb, currentSheetIndex, startWriteRowIndex, userVOList);
    
                            startWriteRowIndex = startWriteRowIndex + currentDayCount % ExcelConstant.PER_WRITE_ROW_COUNT;
                        }
                    }
                }
    
    
                // 4. 下载excel到webroot目录下
                String excelPath = PoiUtil.downLoadExcelToLocalPath(wb, relativePath, fileName);
                System.out.println(excelPath);
    
                // 5. 发送邮件
    
            }
    
            System.out.println("结束计时:" + DateUtil.formatDate(new Date(), DateUtil.YYYY_MM_DD_HH_MM_SS));
    
            return ResultVO.getSuccess("发送用户Email成功");
        }
    
    
        private void writeExcelData(SXSSFWorkbook wb, Integer currentSheetIndex, Integer startWriteRowIndex, List<UserVO> userVOList) {
            if (!CollectionUtils.isEmpty(userVOList)) {
                for (UserVO eachUserVO : userVOList) {
                    SXSSFSheet currentSheet = wb.getSheetAt(currentSheetIndex);
                    SXSSFRow row = currentSheet.createRow(startWriteRowIndex);
                    if (null != eachUserVO.getUid()) {
                        row.createCell(0).setCellValue(eachUserVO.getUid());
                    }
                    row.createCell(1).setCellValue(eachUserVO.getUsername() == null ? "" : eachUserVO.getUsername());
                    row.createCell(2).setCellValue(eachUserVO.getNickname() == null ? "" : eachUserVO.getNickname());
                    row.createCell(3).setCellValue(eachUserVO.getMobile() == null ? "" : eachUserVO.getMobile());
                    if (null != eachUserVO.getCreateTime()) {
                        row.createCell(0).setCellValue(DateUtil.formatDate(eachUserVO.getCreateTime(), DateUtil.YYYY_MM_DD_HH_MM_SS));
                    }
                    startWriteRowIndex = startWriteRowIndex + 1;
                }
            }
        }
    }
    

    2.8 用户mapper

    package com.yzx.caasscs.mapper.dscaasscs.organiza;
    
    import com.yzx.caasscs.entity.dscaasscs.organiza.User;
    import com.yzx.caasscs.vo.organiza.UserVO;
    
    import java.util.List;
    
    /**
     * @author duxuebo
     * @date 2018/8/29
     * @description 用户MAPPER
     */
    public interface UserMapper {
    
         /**
         * 查询指定日期的用户表总数
         *
         * @param userVO
         * @return 总数
         * @throws Exception
         */
        Integer selectUserDateCount(UserVO userVO) throws Exception;
    
    
        /**
         * 查询指定日期的用户列表
         *
         * @param userVO
         * @return UserVO列表
         * @throws Exception
         */
        List<UserVO> selectUserDateList(UserVO userVO) throws Exception;
    }

    2.9 用户mapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    <mapper namespace="com.yzx.caasscs.mapper.dscaasscs.organiza.UserMapper" >
    
      <resultMap id="BaseResultMap" type="com.yzx.caasscs.entity.dscaasscs.organiza.User" >
        <id column="uid" property="uid" jdbcType="BIGINT" />
        <result column="username" property="username" jdbcType="VARCHAR" />
        <result column="password" property="password" jdbcType="VARCHAR" />
        <result column="state" property="state" jdbcType="INTEGER" />
        <result column="nickname" property="nickname" jdbcType="VARCHAR" />
        <result column="position" property="position" jdbcType="VARCHAR" />
        <result column="mobile" property="mobile" jdbcType="VARCHAR" />
        <result column="email" property="email" jdbcType="VARCHAR" />
        <result column="create_uid" property="createUid" jdbcType="BIGINT" />
        <result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
        <result column="update_uid" property="updateUid" jdbcType="BIGINT" />
        <result column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
      </resultMap>
    
    
      <!-- 查询指定日期的用户列表 -->
      <resultMap id="SelectUserDateListMap" type="com.yzx.caasscs.vo.organiza.UserVO" >
        <id column="uid" property="uid" jdbcType="BIGINT" />
        <result column="username" property="username" jdbcType="VARCHAR" />
        <result column="nickname" property="nickname" jdbcType="VARCHAR" />
        <result column="mobile" property="mobile" jdbcType="VARCHAR" />
        <result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
      </resultMap>
    
    
      <sql id="Base_Column_List" >
        uid, username, password, state, nickname, position, mobile, email, create_uid, create_time,
        update_uid, update_time
      </sql>
    
    
      <!-- 查询指定日期的用户表的总数 -->
      <select id="selectUserDateCount" parameterType="com.yzx.caasscs.vo.organiza.UserVO" resultType="java.lang.Integer">
        SELECT
            count(1)
        FROM
            user_${date}
      </select>
    
    
      <!-- 查询指定日期的用户列表 -->
      <select id="selectUserDateList" parameterType="com.yzx.caasscs.vo.organiza.UserVO" resultMap="SelectUserDateListMap">
        SELECT
            uid, username, nickname, mobile, create_time
        FROM
            user_${date}
      </select>
    
    </mapper>

     

    展开全文
  • 最近,开发的时候用到了finereport做报表,砸死报表导出Excel的时候,发现导出的数据不能按月汇总。即使在报表设计器了把格式改成日期类型,也不能汇总。 后来查了数据库设计才知道,表的日期字段类型是VARCHAR2,...

         最近,开发的时候用到了finereport做报表,砸死报表导出Excel的时候,发现导出的数据不能按月汇总。即使在报表设计器了把格式改成日期类型,也不能汇总。

    后来查了数据库设计才知道,表的日期字段类型是VARCHAR2,不是date型。所以,在报表数据集抽出数据时,要把日期进行 to_date转换,这样,导出的报表数据就可以按日期汇总了。


    以上,仅此记录个人工作中遇到问题的解决经验。

    展开全文
  • 在办公过程中,我们经常会遇到,同一个 Excel 需要一定的条件汇总到一张表中,如:一个每销售情况的 Excel 文件,包含 12 个的销售情况,现在要统计出来,每个在某个区域,销售额大于 XXX 的人员,人工操作...
  • 现希望建立一个查询表,能够让用户选择某一个或者两个汇总字段,当用户单击“汇总”按钮后,则按照该一列或者两列进行数量和金额的汇总。该如何实现? 日期 销售经理 客户分类 区域 分配业务员 回款...

    目录

    示例

    代码


    示例

        如图所示,该工作表是某公司的销售记录。现希望建立一个查询表,能够让用户选择某一个或者两个汇总字段,当用户单击“汇总”按钮后,则按照该一列或者两列进行数量和金额的汇总。该如何实现?

    日期 销售经理 客户分类 区域 分配业务员 回款地 所属公司 产品分类 客户名称 销售数量 单价 销售金额 送货单号
    2010/10/2 李泉 二线客户 天河区 何月 中山 海天建材 HT15MM 金虎 1280 65 83200 0005919
    2010/10/2 李泉 二线客户 天河区 何月 中山 海天建材 HT15MM 金虎 1280 65 83200 0005920
    2010/10/2 李泉 二线客户 天河区 何月 中山 海天建材 HT15MM 金虎 1280 65 83200 0005921
    2010/10/3 林海峰 三大家 黄埔区 林海峰 中山 海天建材 HT15MM 猎豹家私 1600 65.5 104800 101004201
    2010/10/3 林海峰 三大家 黄埔区 林海峰 中山 海天建材 HT15MM 猎豹家私 1600 65.5 104800 101004202
    2010/10/3 林海峰 三大家 黄埔区 林海峰 中山 海天建材 HT15MM 猎豹家私 1600 65.5 104800 101004203
    2010/10/3 林海峰 三大家 黄埔区 林海峰 中山 海天建材 HT15MM 猎豹家私 1280 65.5 83840 101004204
    2010/10/4 李泉 二线客户 其他 其他 东莞 建丰林业 SK15MM 彬森 1200 48 57600 SKZ101004101
    2010/10/4 林海峰 三大家 黄埔区 林海峰 中山 海天建材 HT15MM 猎豹家私 1280 65.5 83840 101005201
    2010/10/4 林海峰 三大家 黄埔区 林海峰 中山 海天建材 HT15MM 猎豹家私 1600 65.5 104800 101005202
    2010/10/4 林海峰 三大家 黄埔区 林海峰 中山 海天建材 HT15MM 猎豹家私 1600 65.5 104800 101005203
    2010/10/4 林海峰 三大家 黄埔区 林海峰 中山 海天建材 HT15MM 猎豹家私 1280 65.5 83840 101005204
    2010/10/4 林海峰 三大家 黄埔区 林海峰 中山 海天建材 HT15MM 猎豹家私 1280 65.5 83840 101005205
    2010/10/4 林海峰 三大家 黄埔区 林海峰 中山 海天建材 HT15MM 猎豹家私 1280 65.5 83840 101005206
    2010/10/5 李泉 二线客户 黄埔区 何月 东莞 海天建材 HT15MM 丰台 320 64 20480 SKZ101005-01
    2010/10/5 李泉 二线客户 黄埔区 何月 东莞 海天建材 HT15MM 丰台 240 64 15360 SKZ101005-02
    2010/10/5 林海峰 三大家 黄埔区 林海峰 中山 海天建材 HT15MM 猎豹家私 1040 65.5 68120 101006201
    2010/10/5 林海峰 三大家 黄埔区 林海峰 中山 海天建材 HT15MM 猎豹家私 1600 65.5 104800 101006202
    2010/10/5 林海峰 三大家 黄埔区 林海峰 中山 海天建材 HT15MM 猎豹家私 1280 65.5 83840 101006203
    2010/10/5 林海峰 三大家 黄埔区 林海峰 中山 海天建材 HT15MM 猎豹家私 1280 65.5 83840 101006204
    2010/10/5 林海峰 三大家 黄埔区 林海峰 中山 海天建材 HT15MM 猎豹家私 1280 65.5 83840 101006205
    2010/10/5 林海峰 三大家 黄埔区 林海峰 中山 海天建材 HT15MM 猎豹家私 1280 65.5 83840 101006206
    2010/10/5 李泉 二线客户 其他 直销 中山 海天建材 HT15MM 佛山散客户 50 53 2650 0005927
    2010/10/6 林海峰 三大家 黄埔区 林海峰 东莞 建丰林业 SK15MM 猎豹家私 960 63 60480 SKZ101006-01
    2010/10/6 林海峰 三大家 黄埔区 林海峰 中山 海天建材 HT15MM 猎豹家私 1600 65.5 104800 101007201
    2010/10/6 林海峰 三大家 黄埔区 林海峰 中山 海天建材 HT15MM 猎豹家私 1600 65.5 104800 101007202
    2010/10/6 林海峰 三大家 黄埔区 林海峰 中山 海天建材 HT15MM 猎豹家私 960 65.5 62880 101007203

    代码

        当单击按钮后,首先对用户选择的汇总字段进行判断,并找出汇总所依据的列。若为多列,则本例首先在数据的最后添加一个辅助列,将多列数据进行连接。然后设定程序按照该列进行汇总。待汇总完毕后,删除辅助列,并将汇总列拆分成两列。
     

    Option Explicit
    
    Sub 动态汇总()
        Dim col1 As Long
        Dim col2 As Long
        Dim colFld As Long
        Dim sField1 As String
        Dim sField2 As String
        Dim sField As String
        Dim rowSum As Long
        Dim rowData As Long
        Dim rowNew As Long
        Dim shtSum As Worksheet
        Dim shtData As Worksheet
        Dim blnDelete As Boolean
        Dim sSep As String          '分隔符
        Dim Rng As Range
        
        Set shtSum = Sheets("sheet2")
        Set shtData = Sheets("sheet1")
        
        sSep = "_"
        '清空结果
        shtSum.Range("A9:D" & Rows.Count).Clear
        '获取汇总字段名称
        sField1 = shtSum.Range("B3").Value
        sField2 = shtSum.Range("B4").Value
        '若字段均为空,退出程序
        If sField1 = "" And sField2 = "" Then
            Exit Sub
            '若其中一个为空
            ElseIf sField1 = "" Or sField2 = "" Then
                '字段1为空
                If sField1 = "" Then
                    shtSum.Range("B3").Value = sField2
                    shtSum.Range("B4").Value = ""
                End If
                '字段1不空
                sField = sField1
                
                '获取字段在源数据表中的列号
                colFld = shtData.Rows(1).Find(sField, lookat:=xlWhole).Column
                '不须删除辅助列
                blnDelete = False
            '两个字段都不空
            Else
                '获取两个字段的列号
                col1 = shtData.Rows(1).Find(sField1, lookat:=xlWhole).Column
                col2 = shtData.Rows(1).Find(sField2, lookat:=xlWhole).Column
                
                '实际汇总字段的列号为当前所有数据的右侧的空白列(辅助列)
                colFld = shtData.Range("A1").CurrentRegion.Rows.Count + 1
                '将两个字段组合,添加至汇总字段列
                For rowData = 2 To shtData.Range("A1").CurrentRegion.Rows.Count
                    shtData.Cells(rowData, colFld).Value = shtData.Cells(rowData, col1).Value & sSep & shtData.Cells(rowData, col2).Value
                Next rowData
                '辅助列标识为真
                blnDelete = True
        End If
        
        rowNew = 9
        For rowData = 2 To shtData.Range("A1").CurrentRegion.Rows.Count
            sField = shtData.Cells(rowData, colFld).Value
            Set Rng = shtSum.Range("A9:A" & rowNew).Find(sField, lookat:=xlWhole)
            If Rng Is Nothing Then
                rowSum = rowNew
                shtSum.Cells(rowNew, 1).Value = sField
                rowNew = rowNew + 1
            Else
                rowSum = Rng.Row
            End If
            
            shtSum.Cells(rowSum, "C").Value = shtSum.Cells(rowSum, "C").Value + shtData.Cells(rowData, "J").Value
            shtSum.Cells(rowSum, "C").Value = shtSum.Cells(rowSum, "C").Value + shtData.Cells(rowData, "L").Value
        Next rowData
        
        If blnDelete Then
            shtData.Columns(colFld).Delete
            For rowSum = 9 To rowNew
                sField = shtSum.Cells(rowSum, "A").Value
                If sField <> "" Then
                    sField1 = Left(sField, InStr(sField, sSep) - 1)
                    sField2 = Mid(sField, InStr(sField, sSep) + Len(sSep))
                    shtSum.Cells(rowSum, "A").Value = sField1
                    shtSum.Cells(rowSum, "B").Value = sField2
                End If
            Next rowSum
        End If
    End Sub
    

     

    展开全文
  • Excel 天存储日销售数据,现在需要针对每日的销售数据做累加算出销售额。如 8 1 日的销售额与日销售额相同(已填写): 8 2 日的销售额则需要使用上一日的销售额和本日销售额做累计求出: 使用集...
  • 确定之后,汇总数据如下图所示 index+match 三、替换 1、通过Ctrl+H打开替换,如果要对整个单元格满足条件进行替换,需勾选单元格匹配。 正则 四、数据高亮显示 如何使特定的数据高亮显示?​​​​​​...
  • 现在需要用这些每日数据汇总报表,日期汇总统计每天的投入数、合格数、合格率,列出所有的缺陷种类每天发生的次数,目标报表如下图所示: 这个汇总的棘手问题是每日数据中缺陷种类列数不定,数据结构不相同,...
  • 目录 ...如何使用VBA员工姓名汇总所有工作表的工资项目? 姓名 应发合计 基本工资 补贴 俞卫广 6700 6700 0 高波 6250 6200 50 曲波 3215 3215 0 周..
  • 这些 Excel 的结构格式一模一样,要得到汇总结果就需要归并,可能是简单求和,也可能分类汇总。 解决这类问题的思路一般需要遍历多个文件后读入进行汇总,文件数不固定和格式不规整都会增加难度。 例题描述 现有 ...
  • 数据排序、筛选、fenlei汇总技巧,以及表格打印输出、Excel高级应用技巧等知识。 目录: 第1章 Excel 2010快速入门操作技巧 1.1 界面管理与优化技巧 001招 改变快速访问工具栏的位置 002招 在快速访问工具栏中添加/...
  • 组合Excel数据透视表内的日期项.rar,在实际工作中,如果根据本例Sheet1工作表所示的表格生成数据透视表进行销售量的汇总分析,得到的数据透视表中,因为日期仍然是原始项目排列的,往往难有分析价值。如果能将销售...
  • 11.8 使用分组汇总数据字段 247 11.9 使用高级数据透视表技术 251 11.9.1 使用AutoShow生成执行概要 251 11.9.2 使用ShowDetail过滤记录集 254 11.9.3 为每个区域或模型创建报表 256 11.9.4 手动筛选数据...
  • 11.8 使用分组汇总数据字段 247 11.9 使用高级数据透视表技术 251 11.9.1 使用AutoShow生成执行概要 251 11.9.2 使用ShowDetail过滤记录集 254 11.9.3 为每个区域或模型创建报表 256 11.9.4 手动筛选数据...
  • 11.8 使用分组汇总数据字段 247 11.9 使用高级数据透视表技术 251 11.9.1 使用AutoShow生成执行概要 251 11.9.2 使用ShowDetail过滤记录集 254 11.9.3 为每个区域或模型创建报表 256 11.9.4 手动筛选数据...
  • 11.8 使用分组汇总数据字段 247 11.9 使用高级数据透视表技术 251 11.9.1 使用AutoShow生成执行概要 251 11.9.2 使用ShowDetail过滤记录集 254 11.9.3 为每个区域或模型创建报表 256 11.9.4 手动筛选数据...
  • 数据排序、筛选、fenlei汇总技巧,以及表格打印输出、Excel高级应用技巧等知识。 目录: 第1章 Excel 2010快速入门操作技巧 1.1 界面管理与优化技巧 001招 改变快速访问工具栏的位置 002招 在快速访问工具栏中添加/...
  • 自己的第一个数据透视表.xls2.1轻松改变数据透视表的整体布局.xls2.2使用...字段中的数据项顺序.xls2.10使用拖动法快速改变行字段的数据项排列顺序.xls2.11指定规则调整部门字段中的数据项顺序.xls2.12以大纲...
  • Excel数据分析与图表应用案例精粹_光盘 杨广于 清华大学出版社,2012 目录 第1章 公式与函数基本操作 1  1.1 Excel公式的基本操作 1  1.1.1 公式的输入与编辑 1  1.1.2 公式中的运算符 2  1.1.3 单元格的引用...
  • 这个事情本身并不是什么难题,只是把12个数据按姓名进行合计,但是每个月中人员并不相同,有走的,也有新加入的。开始想用公式实现,实现时发现非常麻烦,主要是人员不定,就算弄好了,估计速度也成问题。...
  • 数据中的日期列格式为年//日,为便于汇总,需转换为年/格式。 需要日期、考试科目对分数进行分组并求均值。 需要将分析结果以柱状图的形式进行展示 关键中间结果 读取数据 data = pd.read_excel("考试分数....
  • 保险查询系统,普通用户及用户组长可年月查看、汇总、导出个人或本部门保险信息;管理员可在线上传Excel表格导入保险项目与用户信息。是国内首个为各类型企事业单位提供的最新的高效办公辅助软件。 【功能介绍】 ...
  • Excel百宝箱

    2012-10-27 17:09:21
    颜色汇总】:背景色对选区的数据合类合计 【解除密码保护】:删除工作表保护的密码,瞬间完成。适用于Excel 2002、2003、2007、2010 【显示经典菜单】:在Excel 2007或者2010中显示2003样式的菜单,方便初学...
  • • 获取Excel数据透视表数据 • 创建复合范围的Excel数据透视表 • 数据透视图 • 模拟运算表 • 单变量求解 • 规划求解 • 分析工具库 第5篇 使用Excel的高级功能 • 设置单元格数值条件 • 设置公式条件 • ...
  • Excel必备工具集

    2009-07-05 22:09:01
    1、将汇总里面“单表数据汇总”名称改为“工作表进行汇总”, “套表数据汇总”名称改为“工作薄进行汇总”,便于理解和运用。并对套表汇总功能增加一个汇总标志色的确认提示,防止误操作。 2、“未确认融资费用...
  • EXCEL函数公式集

    热门讨论 2010-03-16 03:26:38
    以2006年1031日为基准日,按按身份证计算年龄(周岁)的公式 身份证号分男女年龄段 【年龄和工龄计算】 根据出生年月计算年龄 根据出生年月推算生肖 如何求出一个人到某指定日期的周岁? 计算距离退休年龄的公式 求...
  • Excel新增工具集

    2011-12-20 09:30:27
    1、500WAN彩票网足彩分析:将500WAN彩票网上欧洲赔率数据下载到本地Microsoft Office Excel工作簿中,并且定时刷新网上数据,跟踪即时赔率与赛事的变化。用极短时间,在《欧赔走势》与《欧赔比较》等工作表中对各...
  • Excel百宝箱8.0

    2011-06-07 21:32:17
    颜色汇总】:背景色对选区的数据合类合计 【反向选择】:选择当前区域中未选择的区域 【千年日历】:工单元格中生成千年日期。默认显示本月的日历,可以自由调整年月 【保护公式】:保护当前工作表所有公式,不...
  • 七、提供按月统一计算个税功能,并提供计算详尽的个税计算过程核对表, 一月多次发放工资再无个税扣除烦恼。 八、新增强大的数据导入功能,既可以导入职工姓名、帐号等基础数据,也可以导入代扣水电费等具体数据, ...
  • Excel必备工具箱6.23版

    2009-10-10 10:21:35
    1、将汇总里面“单表数据汇总”名称改为“工作表进行汇总”, “套表数据汇总”名称改为“工作薄进行汇总”,便于理解和运用。并对套表汇总功能增加一个汇总标志色的确认提示,防止误操作。 2、“未确认融资费用...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 276
精华内容 110
关键字:

excel按月汇总数据