若依前后端分离版本-导出Excel配置合并行,单列行合并

先上效果,满足的可以往下看,节省时间。

效果:合并第2列,第4列的单元行,根据第2列合并2列和4列,如图:

版本:

若依前后端分离版本 

com.ruoyi 3.5.0               ruoyi-common 4.0.0

实现:

1)common包的Excel类添加参数,这样为了加到注解配置当中去,合并列还没写

 2)使用方法,导出的实体加上参数,只加导出的主列就行,比如这个意思就是,根据orderNo字段相同的行进行合并,合并第1/7/8行

 Controller方法里还是正常用法

 3)添加文件,也可直接进行修改ExcelUtil文件,建议直接创建这个新文件

 ExcelMerge代码(关键代码在这个方法里 addCell 

package com.ruoyi.common.utils.poi;

import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Excel.ColumnType;
import com.ruoyi.common.annotation.Excel.Type;
import com.ruoyi.common.annotation.Excels;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.exception.CustomException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.DictUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileTypeUtils;
import com.ruoyi.common.utils.file.ImageUtils;
import com.ruoyi.common.utils.reflect.ReflectUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import org.apache.poi.xssf.usermodel.XSSFDataValidation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.*;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.*;
import java.util.stream.Collectors;


/**
 * Excel相关处理
 *
 * @author ruoyi
 */
public class ExcelUtilMerge<T> {
    private static final Logger log = LoggerFactory.getLogger(ExcelUtilMerge.class);

    /**
     * Excel sheet最大行数,默认65536
     */
    public static final int sheetSize = 65536;

    /**
     * 工作表名称
     */
    private String sheetName;

    /**
     * 导出类型(EXPORT:导出数据;IMPORT:导入模板)
     */
    private Type type;

    /**
     * 工作薄对象
     */
    private Workbook wb;

    /**
     * 工作表对象
     */
    private Sheet sheet;

    /**
     * 样式列表
     */
    private Map<String, CellStyle> styles;

    /**
     * 导入导出数据列表
     */
    private List<T> list;

    /**
     * 注解列表
     */
    private List<Object[]> fields;

    /**
     * 最大高度
     */
    private short maxHeight;

    /**
     * 统计列表
     */
    private Map<Integer, Double> statistics = new HashMap<Integer, Double>();

    /**
     * 数字格式
     */
    private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00");

    /**
     * 实体对象
     */
    public Class<T> clazz;

    //是否进行合并行
    private boolean switchMearge = false;
    //合并行数  起始行,结束行
    private int mergeLine_start = 0;
    private int mergeLine_end = 0;

    public ExcelUtilMerge(Class<T> clazz) {
        this.clazz = clazz;
    }

    public void init(List<T> list, String sheetName, Type type) {
        if (list == null) {
            list = new ArrayList<T>();
        }
        this.list = list;
        this.sheetName = sheetName;
        this.type = type;
        createExcelField();
        createWorkbook();
    }

    /**
     * 对excel表单默认第一个索引名转换成list
     *
     * @param is 输入流
     * @return 转换后集合
     */
    public List<T> importExcel(InputStream is) throws Exception {
        return importExcel(StringUtils.EMPTY, is);
    }

    /**
     * 对excel表单指定表格索引名转换成list
     *
     * @param sheetName 表格索引名
     * @param is        输入流
     * @return 转换后集合
     */
    public List<T> importExcel(String sheetName, InputStream is) throws Exception {
        this.type = Type.IMPORT;
        this.wb = WorkbookFactory.create(is);
        List<T> list = new ArrayList<T>();
        Sheet sheet = null;
        if (StringUtils.isNotEmpty(sheetName)) {
            // 如果指定sheet名,则取指定sheet中的内容.
            sheet = wb.getSheet(sheetName);
        } else {
            // 如果传入的sheet名不存在则默认指向第1个sheet.
            sheet = wb.getSheetAt(0);
        }

        if (sheet == null) {
            throw new IOException("文件sheet不存在");
        }

        int rows = sheet.getPhysicalNumberOfRows();

        if (rows > 0) {
            // 定义一个map用于存放excel列的序号和field.
            Map<String, Integer> cellMap = new HashMap<String, Integer>();
            // 获取表头
            Row heard = sheet.getRow(0);
            for (int i = 0; i < heard.getPhysicalNumberOfCells(); i++) {
                Cell cell = heard.getCell(i);
                if (StringUtils.isNotNull(cell)) {
                    String value = this.getCellValue(heard, i).toString();
                    cellMap.put(value, i);
                } else {
                    cellMap.put(null, i);
                }
            }
            // 有数据时才处理 得到类的所有field.
            Field[] allFields = clazz.getDeclaredFields();
            // 定义一个map用于存放列的序号和field.
            Map<Integer, Field> fieldsMap = new HashMap<Integer, Field>();
            for (int col = 0; col < allFields.length; col++) {
                Field field = allFields[col];
                Excel attr = field.getAnnotation(Excel.class);
                if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) {
                    // 设置类的私有字段属性可访问.
                    field.setAccessible(true);
                    Integer column = cellMap.get(attr.name());
                    if (column != null) {
                        fieldsMap.put(column, field);
                    }
                }
            }
            for (int i = 1; i < rows; i++) {
                // 从第2行开始取数据,默认第一行是表头.
                Row row = sheet.getRow(i);
                if (row == null) {
                    continue;
                }
                T entity = null;
                for (Map.Entry<Integer, Field> entry : fieldsMap.entrySet()) {
                    Object val = this.getCellValue(row, entry.getKey());

                    // 如果不存在实例则新建.
                    entity = (entity == null ? clazz.newInstance() : entity);
                    // 从map中得到对应列的field.
                    Field field = fieldsMap.get(entry.getKey());
                    // 取得类型,并根据对象类型设置值.
                    Class<?> fieldType = field.getType();
                    if (String.class == fieldType) {
                        String s = Convert.toStr(val);
                        if (StringUtils.endsWith(s, ".0")) {
                            val = StringUtils.substringBefore(s, ".0");
                        } else {
                            String dateFormat = field.getAnnotation(Excel.class).dateFormat();
                            if (StringUtils.isNotEmpty(dateFormat)) {
                                val = DateUtils.parseDateToStr(dateFormat, (Date) val);
                            } else {
                                val = Convert.toStr(val);
                            }
                        }
                    } else if ((Integer.TYPE == fieldType || Integer.class == fieldType) && StringUtils.isNumeric(Convert.toStr(val))) {
                        val = Convert.toInt(val);
                    } else if (Long.TYPE == fieldType || Long.class == fieldType) {
                        val = Convert.toLong(val);
                    } else if (Double.TYPE == fieldType || Double.class == fieldType) {
                        val = Convert.toDouble(val);
                    } else if (Float.TYPE == fieldType || Float.class == fieldType) {
                        val = Convert.toFloat(val);
                    } else if (BigDecimal.class == fieldType) {
                        val = Convert.toBigDecimal(val);
                    } else if (Date.class == fieldType) {
                        if (val instanceof String) {
                            val = DateUtils.parseDate(val);
                        } else if (val instanceof Double) {
                            val = DateUtil.getJavaDate((Double) val);
                        }
                    } else if (Boolean.TYPE == fieldType || Boolean.class == fieldType) {
                        val = Convert.toBool(val, false);
                    }
                    if (StringUtils.isNotNull(fieldType)) {
                        Excel attr = field.getAnnotation(Excel.class);
                        String propertyName = field.getName();
                        if (StringUtils.isNotEmpty(attr.targetAttr())) {
                            propertyName = field.getName() + "." + attr.targetAttr();
                        } else if (StringUtils.isNotEmpty(attr.readConverterExp())) {
                            val = reverseByExp(Convert.toStr(val), attr.readConverterExp(), attr.separator());
                        } else if (StringUtils.isNotEmpty(attr.dictType())) {
                            val = reverseDictByExp(Convert.toStr(val), attr.dictType(), attr.separator());
                        }
                        ReflectUtils.invokeSetter(entity, propertyName, val);
                    }
                }
                list.add(entity);
            }
        }
        return list;
    }


    /**
     * 对list数据源将其里面的数据导入到excel表单
     *
     * @param list      导出数据集合
     * @param sheetName 工作表的名称
     * @return 结果
     */
    public AjaxResult exportExcel(List<T> list, String sheetName) {
        this.init(list, sheetName, Type.EXPORT);
        return exportExcel();
    }

    /**
     * 对list数据源将其里面的数据导入到excel表单
     *
     * @param sheetName 工作表的名称
     * @return 结果
     */
    public AjaxResult importTemplateExcel(String sheetName) {
        this.init(null, sheetName, Type.IMPORT);
        return exportExcel();
    }

    /**
     * 对list数据源将其里面的数据导入到excel表单
     *
     * @return 结果
     */
    public AjaxResult exportExcel() {
        OutputStream out = null;
        try {
            // 取出一共有多少个sheet.
            double sheetNo = Math.ceil(list.size() / sheetSize);
            for (int index = 0; index <= sheetNo; index++) {
                createSheet(sheetNo, index);

                // 产生一行
                Row row = sheet.createRow(0);
                int column = 0;
                // 写入各个字段的列头名称
                for (Object[] os : fields) {
                    Excel excel = (Excel) os[1];
                    this.createCell(excel, row, column++);
                }
                if (Type.EXPORT.equals(type)) {
                    fillExcelData(index, row);
                    addStatisticsRow();
                }
            }
            String filename = encodingFilename(sheetName);
            out = new FileOutputStream(getAbsoluteFile(filename));
            wb.write(out);
            return AjaxResult.success(filename);
        } catch (Exception e) {
            log.error("导出Excel异常{}", e.getMessage());
            throw new CustomException("导出Excel失败,请联系网站管理员!");
        } finally {
            if (wb != null) {
                try {
                    wb.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }
    }

    /**
     * 填充excel数据
     *
     * @param index 序号
     * @param row   单元格行
     */
    public void fillExcelData(int index, Row row) {
        int startNo = index * sheetSize;
        int endNo = Math.min(startNo + sheetSize, list.size());

        //当前行
        int thisLine = 0;


        for (int i = startNo; i < endNo; i++) {
            row = sheet.createRow(i + 1 - startNo);

            thisLine = i + 1 - startNo;
            // 得到导出对象.
            T vo = (T) list.get(i);
            T vo_previous = null;
            //得到上一个导出对象
            if (i != startNo) {
                vo_previous = (T) list.get(i - 1);
            }
            /**
             *取下一个对象   与当前对象对比,如果相同,记住当前列,再与下一个对比,一直对比到不相同,执行合并代码
             * 注解加入 合并行列标识
             */
            int column = 0;
            for (Object[] os : fields) {
                Field field = (Field) os[0];
                Excel excel = (Excel) os[1];
                // 设置实体类私有属性可访问
                field.setAccessible(true);
                this.addCell(excel, row, vo, field, column++, vo_previous, thisLine);
            }
        }
    }

    /**
     * 创建表格样式
     *
     * @param wb 工作薄对象
     * @return 样式列表
     */
    private Map<String, CellStyle> createStyles(Workbook wb) {
        // 写入各条记录,每条记录对应excel表中的一行
        Map<String, CellStyle> styles = new HashMap<String, CellStyle>();
        CellStyle style = wb.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER);
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        style.setBorderRight(BorderStyle.THIN);
        style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
        style.setBorderLeft(BorderStyle.THIN);
        style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
        style.setBorderTop(BorderStyle.THIN);
        style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
        style.setBorderBottom(BorderStyle.THIN);
        style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
        Font dataFont = wb.createFont();
        dataFont.setFontName("Arial");
        dataFont.setFontHeightInPoints((short) 10);
        style.setFont(dataFont);
        styles.put("data", style);

        style = wb.createCellStyle();
        style.cloneStyleFrom(styles.get("data"));
        style.setAlignment(HorizontalAlignment.CENTER);
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex());
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        Font headerFont = wb.createFont();
        headerFont.setFontName("Arial");
        headerFont.setFontHeightInPoints((short) 10);
        headerFont.setBold(true);
        headerFont.setColor(IndexedColors.WHITE.getIndex());
        style.setFont(headerFont);
        styles.put("header", style);

        style = wb.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER);
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        Font totalFont = wb.createFont();
        totalFont.setFontName("Arial");
        totalFont.setFontHeightInPoints((short) 10);
        style.setFont(totalFont);
        styles.put("total", style);

        style = wb.createCellStyle();
        style.cloneStyleFrom(styles.get("data"));
        style.setAlignment(HorizontalAlignment.LEFT);
        styles.put("data1", style);

        style = wb.createCellStyle();
        style.cloneStyleFrom(styles.get("data"));
        style.setAlignment(HorizontalAlignment.CENTER);
        styles.put("data2", style);

        style = wb.createCellStyle();
        style.cloneStyleFrom(styles.get("data"));
        style.setAlignment(HorizontalAlignment.RIGHT);
        styles.put("data3", style);

        return styles;
    }

    /**
     * 创建单元格
     */
    public Cell createCell(Excel attr, Row row, int column) {
        // 创建列
        Cell cell = row.createCell(column);
        // 写入列信息
        cell.setCellValue(attr.name());
        setDataValidation(attr, row, column);
        cell.setCellStyle(styles.get("header"));
        return cell;
    }

    /**
     * 设置单元格信息
     *
     * @param value 单元格值
     * @param attr  注解相关
     * @param cell  单元格信息
     */
    public void setCellVo(Object value, Excel attr, Cell cell) {
        if (ColumnType.STRING == attr.cellType()) {
            cell.setCellValue(StringUtils.isNull(value) ? attr.defaultValue() : value + attr.suffix());
        } else if (ColumnType.NUMERIC == attr.cellType()) {
            if (StringUtils.isNotNull(value)) {
                cell.setCellValue(StringUtils.contains(Convert.toStr(value), ".") ? Convert.toDouble(value) : Convert.toInt(value));
            }
        } else if (ColumnType.IMAGE == attr.cellType()) {
            ClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, (short) cell.getColumnIndex(), cell.getRow().getRowNum(), (short) (cell.getColumnIndex() + 1),
                    cell.getRow().getRowNum() + 1);
            String imagePath = Convert.toStr(value);
            if (StringUtils.isNotEmpty(imagePath)) {
                byte[] data = ImageUtils.getImage(imagePath);
                getDrawingPatriarch(cell.getSheet()).createPicture(anchor,
                        cell.getSheet().getWorkbook().addPicture(data, getImageType(data)));
            }
        }
    }

    /**
     * 获取画布
     */
    public static Drawing<?> getDrawingPatriarch(Sheet sheet) {
        if (sheet.getDrawingPatriarch() == null) {
            sheet.createDrawingPatriarch();
        }
        return sheet.getDrawingPatriarch();
    }

    /**
     * 获取图片类型,设置图片插入类型
     */
    public int getImageType(byte[] value) {
        String type = FileTypeUtils.getFileExtendName(value);
        if ("JPG".equalsIgnoreCase(type)) {
            return Workbook.PICTURE_TYPE_JPEG;
        } else if ("PNG".equalsIgnoreCase(type)) {
            return Workbook.PICTURE_TYPE_PNG;
        }
        return Workbook.PICTURE_TYPE_JPEG;
    }

    /**
     * 创建表格样式
     */
    public void setDataValidation(Excel attr, Row row, int column) {
        if (attr.name().indexOf("注:") >= 0) {
            sheet.setColumnWidth(column, 6000);
        } else {
            // 设置列宽
            sheet.setColumnWidth(column, (int) ((attr.width() + 0.72) * 256));
        }
        // 如果设置了提示信息则鼠标放上去提示.
        if (StringUtils.isNotEmpty(attr.prompt())) {
            // 这里默认设了2-101列提示.
            setXSSFPrompt(sheet, "", attr.prompt(), 1, 100, column, column);
        }
        // 如果设置了combo属性则本列只能选择不能输入
        if (attr.combo().length > 0) {
            // 这里默认设了2-101列只能选择不能输入.
            setXSSFValidation(sheet, attr.combo(), 1, 100, column, column);
        }
    }

    /**
     * @param attr     excel
     * @param row
     * @param vo
     * @param field
     * @param column
     * @param thisLine 当前行
     * @return org.apache.poi.ss.usermodel.Cell
     * @author xkng
     * @creed: 合并单元行拓展
     * @date 2021/12/14 14:51
     */
    public Cell addCell(Excel attr, Row row, T vo, Field field, int column, T vo_previous, int thisLine) {
        Cell cell = null;
        try {
            // 设置行高
            row.setHeight(maxHeight);
            // 根据Excel中设置情况决定是否导出,有些情况需要保持为空,希望用户填写这一列.
            if (attr.isExport()) {
                // 创建cell
                cell = row.createCell(column);
                int align = attr.align().value();
                cell.setCellStyle(styles.get("data" + (align >= 1 && align <= 3 ? align : "")));

                // 用于读取对象中的属性
                Object value = getTargetValue(vo, field, attr);
                Object value_previous = null;
                if (vo_previous != null) {
                    value_previous = getTargetValue(vo_previous, field, attr);
                }
                String dateFormat = attr.dateFormat();
                String readConverterExp = attr.readConverterExp();
                String separator = attr.separator();
                String dictType = attr.dictType();

                String mergeLineStr = attr.mergeLine();
                String[] mergeLine = mergeLineStr.split(",");

                if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value)) {
                    cell.setCellValue(DateUtils.parseDateToStr(dateFormat, (Date) value));
                } else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value)) {
                    cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp, separator));
                } else if (StringUtils.isNotEmpty(dictType) && StringUtils.isNotNull(value)) {
                    cell.setCellValue(convertDictByExp(Convert.toStr(value), dictType, separator));
                } else if (value instanceof BigDecimal && -1 != attr.scale()) {
                    cell.setCellValue((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).toString());
                } else {
                    // 设置列类型
                    setCellVo(value, attr, cell);
                }

                addStatisticsData(column, Convert.toStr(value), attr);

                //合并行  单列为基准进行合并
                if (mergeLine.length > 0 && mergeLine[0] != null && !"".equals(mergeLine[0])) {
                    if (value.equals(value_previous)) {
                        if (this.mergeLine_start == 0) {
                            this.mergeLine_start = thisLine - 1;
                        }
                        this.mergeLine_end = thisLine;
                    } else {
                        if (this.mergeLine_start != 0 && this.mergeLine_end != 0) {
                            if (this.mergeLine_start != this.mergeLine_end) {
                                for (String ml : mergeLine) {
                                    CellRangeAddress region = new CellRangeAddress(this.mergeLine_start, this.mergeLine_end, Integer.parseInt(ml), Integer.parseInt(ml));
                                    sheet.addMergedRegion(region);
                                }
                            }
                            this.mergeLine_start = 0;
                            this.mergeLine_end = 0;
                        }
                    }
                }
            }
        } catch (Exception e) {
            log.error("导出Excel失败{}", e);
        }
        return cell;
    }

    /**
     * 设置 POI XSSFSheet 单元格提示
     *
     * @param sheet         表单
     * @param promptTitle   提示标题
     * @param promptContent 提示内容
     * @param firstRow      开始行
     * @param endRow        结束行
     * @param firstCol      开始列
     * @param endCol        结束列
     */
    public void setXSSFPrompt(Sheet sheet, String promptTitle, String promptContent, int firstRow, int endRow,
                              int firstCol, int endCol) {
        DataValidationHelper helper = sheet.getDataValidationHelper();
        DataValidationConstraint constraint = helper.createCustomConstraint("DD1");
        CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
        DataValidation dataValidation = helper.createValidation(constraint, regions);
        dataValidation.createPromptBox(promptTitle, promptContent);
        dataValidation.setShowPromptBox(true);
        sheet.addValidationData(dataValidation);
    }

    /**
     * 设置某些列的值只能输入预制的数据,显示下拉框.
     *
     * @param sheet    要设置的sheet.
     * @param textlist 下拉框显示的内容
     * @param firstRow 开始行
     * @param endRow   结束行
     * @param firstCol 开始列
     * @param endCol   结束列
     * @return 设置好的sheet.
     */
    public void setXSSFValidation(Sheet sheet, String[] textlist, int firstRow, int endRow, int firstCol, int endCol) {
        DataValidationHelper helper = sheet.getDataValidationHelper();
        // 加载下拉列表内容
        DataValidationConstraint constraint = helper.createExplicitListConstraint(textlist);
        // 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列
        CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
        // 数据有效性对象
        DataValidation dataValidation = helper.createValidation(constraint, regions);
        // 处理Excel兼容性问题
        if (dataValidation instanceof XSSFDataValidation) {
            dataValidation.setSuppressDropDownArrow(true);
            dataValidation.setShowErrorBox(true);
        } else {
            dataValidation.setSuppressDropDownArrow(false);
        }

        sheet.addValidationData(dataValidation);
    }

    /**
     * 解析导出值 0=男,1=女,2=未知
     *
     * @param propertyValue 参数值
     * @param converterExp  翻译注解
     * @param separator     分隔符
     * @return 解析后值
     */
    public static String convertByExp(String propertyValue, String converterExp, String separator) {
        StringBuilder propertyString = new StringBuilder();
        String[] convertSource = converterExp.split(",");
        for (String item : convertSource) {
            String[] itemArray = item.split("=");
            if (StringUtils.containsAny(separator, propertyValue)) {
                for (String value : propertyValue.split(separator)) {
                    if (itemArray[0].equals(value)) {
                        propertyString.append(itemArray[1] + separator);
                        break;
                    }
                }
            } else {
                if (itemArray[0].equals(propertyValue)) {
                    return itemArray[1];
                }
            }
        }
        return StringUtils.stripEnd(propertyString.toString(), separator);
    }

    /**
     * 反向解析值 男=0,女=1,未知=2
     *
     * @param propertyValue 参数值
     * @param converterExp  翻译注解
     * @param separator     分隔符
     * @return 解析后值
     */
    public static String reverseByExp(String propertyValue, String converterExp, String separator) {
        StringBuilder propertyString = new StringBuilder();
        String[] convertSource = converterExp.split(",");
        for (String item : convertSource) {
            String[] itemArray = item.split("=");
            if (StringUtils.containsAny(separator, propertyValue)) {
                for (String value : propertyValue.split(separator)) {
                    if (itemArray[1].equals(value)) {
                        propertyString.append(itemArray[0] + separator);
                        break;
                    }
                }
            } else {
                if (itemArray[1].equals(propertyValue)) {
                    return itemArray[0];
                }
            }
        }
        return StringUtils.stripEnd(propertyString.toString(), separator);
    }

    /**
     * 解析字典值
     *
     * @param dictValue 字典值
     * @param dictType  字典类型
     * @param separator 分隔符
     * @return 字典标签
     */
    public static String convertDictByExp(String dictValue, String dictType, String separator) {
        return DictUtils.getDictLabel(dictType, dictValue, separator);
    }

    /**
     * 反向解析值字典值
     *
     * @param dictLabel 字典标签
     * @param dictType  字典类型
     * @param separator 分隔符
     * @return 字典值
     */
    public static String reverseDictByExp(String dictLabel, String dictType, String separator) {
        return DictUtils.getDictValue(dictType, dictLabel, separator);
    }

    /**
     * 合计统计信息
     */
    private void addStatisticsData(Integer index, String text, Excel entity) {
        if (entity != null && entity.isStatistics()) {
            Double temp = 0D;
            if (!statistics.containsKey(index)) {
                statistics.put(index, temp);
            }
            try {
                temp = Double.valueOf(text);
            } catch (NumberFormatException e) {
            }
            statistics.put(index, statistics.get(index) + temp);
        }
    }

    /**
     * 创建统计行
     */
    public void addStatisticsRow() {
        if (statistics.size() > 0) {
            Cell cell = null;
            Row row = sheet.createRow(sheet.getLastRowNum() + 1);
            Set<Integer> keys = statistics.keySet();
            cell = row.createCell(0);
            cell.setCellStyle(styles.get("total"));
            cell.setCellValue("合计");

            for (Integer key : keys) {
                cell = row.createCell(key);
                cell.setCellStyle(styles.get("total"));
                cell.setCellValue(DOUBLE_FORMAT.format(statistics.get(key)));
            }
            statistics.clear();
        }
    }

    /**
     * 编码文件名
     */
    public String encodingFilename(String filename) {
        filename = UUID.randomUUID().toString() + "_" + filename + ".xlsx";
        return filename;
    }

    /**
     * 获取下载路径
     *
     * @param filename 文件名称
     */
    public String getAbsoluteFile(String filename) {
        String downloadPath = RuoYiConfig.getDownloadPath() + filename;
        File desc = new File(downloadPath);
        if (!desc.getParentFile().exists()) {
            desc.getParentFile().mkdirs();
        }
        return downloadPath;
    }

    /**
     * 获取bean中的属性值
     *
     * @param vo    实体对象
     * @param field 字段
     * @param excel 注解
     * @return 最终的属性值
     * @throws Exception
     */
    private Object getTargetValue(T vo, Field field, Excel excel) throws Exception {
        Object o = field.get(vo);
        if (StringUtils.isNotEmpty(excel.targetAttr())) {
            String target = excel.targetAttr();
            if (target.indexOf(".") > -1) {
                String[] targets = target.split("[.]");
                for (String name : targets) {
                    o = getValue(o, name);
                }
            } else {
                o = getValue(o, target);
            }
        }
        return o;
    }

    /**
     * 以类的属性的get方法方法形式获取值
     *
     * @param o
     * @param name
     * @return value
     * @throws Exception
     */
    private Object getValue(Object o, String name) throws Exception {
        if (StringUtils.isNotNull(o) && StringUtils.isNotEmpty(name)) {
            Class<?> clazz = o.getClass();
            Field field = clazz.getDeclaredField(name);
            field.setAccessible(true);
            o = field.get(o);
        }
        return o;
    }

    /**
     * 得到所有定义字段
     */
    private void createExcelField() {
        this.fields = new ArrayList<Object[]>();
        List<Field> tempFields = new ArrayList<>();
        tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields()));
        tempFields.addAll(Arrays.asList(clazz.getDeclaredFields()));
        for (Field field : tempFields) {
            // 单注解
            if (field.isAnnotationPresent(Excel.class)) {
                putToField(field, field.getAnnotation(Excel.class));
            }

            // 多注解
            if (field.isAnnotationPresent(Excels.class)) {
                Excels attrs = field.getAnnotation(Excels.class);
                Excel[] excels = attrs.value();
                for (Excel excel : excels) {
                    putToField(field, excel);
                }
            }
        }
        this.fields = this.fields.stream().sorted(Comparator.comparing(objects -> ((Excel) objects[1]).sort())).collect(Collectors.toList());
        this.maxHeight = getRowHeight();
    }

    /**
     * 根据注解获取最大行高
     */
    public short getRowHeight() {
        double maxHeight = 0;
        for (Object[] os : this.fields) {
            Excel excel = (Excel) os[1];
            maxHeight = maxHeight > excel.height() ? maxHeight : excel.height();
        }
        return (short) (maxHeight * 20);
    }

    /**
     * 放到字段集合中
     */
    private void putToField(Field field, Excel attr) {
        if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) {
            this.fields.add(new Object[]{field, attr});
        }
    }

    /**
     * 创建一个工作簿
     */
    public void createWorkbook() {
        this.wb = new SXSSFWorkbook(500);
    }

    /**
     * 创建工作表
     *
     * @param sheetNo sheet数量
     * @param index   序号
     */
    public void createSheet(double sheetNo, int index) {
        this.sheet = wb.createSheet();
        this.styles = createStyles(wb);
        // 设置工作表的名称.
        if (sheetNo == 0) {
            wb.setSheetName(index, sheetName);
        } else {
            wb.setSheetName(index, sheetName + index);
        }
    }

    /**
     * 获取单元格值
     *
     * @param row    获取的行
     * @param column 获取单元格列号
     * @return 单元格值
     */
    public Object getCellValue(Row row, int column) {
        if (row == null) {
            return row;
        }
        Object val = "";
        try {
            Cell cell = row.getCell(column);
            if (StringUtils.isNotNull(cell)) {
                if (cell.getCellType() == CellType.NUMERIC || cell.getCellType() == CellType.FORMULA) {
                    val = cell.getNumericCellValue();
                    if (DateUtil.isCellDateFormatted(cell)) {
                        val = DateUtil.getJavaDate((Double) val); // POI Excel 日期格式转换
                    } else {
                        if ((Double) val % 1 != 0) {
                            val = new BigDecimal(val.toString());
                        } else {
                            val = new DecimalFormat("0").format(val);
                        }
                    }
                } else if (cell.getCellType() == CellType.STRING) {
                    val = cell.getStringCellValue();
                } else if (cell.getCellType() == CellType.BOOLEAN) {
                    val = cell.getBooleanCellValue();
                } else if (cell.getCellType() == CellType.ERROR) {
                    val = cell.getErrorCellValue();
                }

            }
        } catch (Exception e) {
            return val;
        }
        return val;
    }
}

不负热爱,帮助到的话一键三连哦~

2022-05-12 说明一定要注意,注解配置的参数,Excel当中列是从第0列开始的,给大家把最终的效果放上来了,有问题可以再问我,项目一直在用着应该是没有问题的~

  • 11
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 36
    评论
EXCEL集成工具箱V8.0 多国语言版(2003-2010通用)增强版! * 软件大小: 22.90MB * 软件授权: 免费共享软件 * 软件语言: 多国语言[中文繁体/简体/英文] * 开 发 商: 创思维软件工作室 * 更新时间: 2010-09-22 * 应用平台: Win9X/Win2000/WinXP/Win2003/Vista/Wind7 Excel集成工具箱8.0是利用VBA(Visual Basic for Applications)语言编写的增强应用型插件。包括160个菜单功能和100个左右 自定义函数,集160个工具于一身,但体积小于16MB。当安装集成工具箱后,如果您使用Excel 2003,则将产生【工具箱】菜单, 包括160多个子菜单;如果您使用Excel 2007或者2010,将产生【集成】与【工具箱】功能区。根据各功能的特点,对子菜单 作了18个分类, 而在函数向导对话框中也生成100个左右新的函数,用于扩展Excel的计算功能。且所有功能都通用于 Excel 2002、2003和2007、2010。支持中英文显示与繁简体操作系统、拥有20多款华丽的皮肤界面,支持Excel2007全面 隐藏选项卡,这个插件还模拟了一个Excel2003样式的菜单,目的就是方便那些从Excel2003转向使用2007或2010版的朋友使用。 ============================================================================================ 下载地址(集成工具箱本身3.84MB,解压后超过16MB,不含帮助文件): 网盘下载:http://www.brsbox.com/jackeyliang(含帮助,解压超过50MB) 共享资料下载: http://ishare.iask.sina.com.cn/f/10201782.html EXCEL集成工具箱V8.0完整增强版.rar 多特软件站下载: http://www.duote.com/soft/1495.html EXCEL集成工具箱V8.0完整版.rar (22.90MB) 非凡软件站下载: http://www.crsky.com/soft/22056.html EXCEL集成工具箱V8.0完整版.rar (22.90MB) 绿色软件站下载: http://soft.syue.com/soft/98/99/2010/2010081491963.html EXCEL集成工具箱V7.0完整版.rar (19.42MB) 软件屋下载: http://soft.softhouse.com.cn/software/show/76357.html EXCEL集成工具箱V7.0完整版.rar 大观软件站下载: http://guansky.com/soft/html/15828.html EXCEL集成工具箱V7.0完整版.rar IT资讯平台下载: http://download.it168.com/547/1483/index.shtml EXCEL集成工具箱V7.0完整版.rar ============================================================================================= 本工具箱160个菜单工具的功能介绍如下: 分类 功能名称 功能介绍 繁简转换 【简体转繁体】 将选中区域存储格的简体字批量转换成繁体。 【繁体转简体】 将选中区域存储格的繁体字批量转换成简体。 【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的加总求和,以及显示选区包含的数字、字符、汉字的个数等信息。 【GB2转BIG5】 将选中区域存储格的简体字(GB2)批量转换成繁体操作系统的繁体(BIG5)。 【BIG5转GB2】 将选中区域存储格的繁体字(BIG5)批量转换成简体操作系统的简体(GB2)。 完 美 背 景 着 色 【选区背景】 默认启动智能着色方式,此功能会清除一部分背景颜色,但对工作表中的条件格式会作完全保留,丝毫没有影响。最大的特点是支持屏幕列捲轴的操作而不影响显示。 【选区背景选择】 进着色功能切换,支持着色、列着色、与列同时着色、智能着色、选区着色、反向着色共6种方式供选择,可以自定义56种基本及颜色板任意着色颜色。 【条件背景】 默认启动智能着色方式,此功能不会清除背景颜色,但会对工作表中的条件格式作自动清除。最大的特点是支持屏幕列捲轴的操作而不影响显示。 【条件背景选择】 进着色功能切换,支持着色、列着色、与列同时着色、智能着色、选区着色、反向着色共6种方式供选择,可以自定义56种基本及颜色板任意着色颜色。 【高级背景】 将选择的颜色标示,以突出当前,有利于数据查看。可以随心所欲地定义颜色,还可以自由调整颜色的深浅。本工具相对于同类工具有不破坏背景色、条件格式、复制粘贴和撤消功能之优点。 【高级背景选择】 背景着色的高级功能,支持着色、列着色、与列同时着色共3种方式供选择。 快捷取数 【快捷取数列】 随存储格即时移动的快捷数据清单,可取任意区域的数据为唯一值清单,提高数据录入效率。最重要的是清单的最后6项为子程序功能,点击则可以完成增加清单显示宽度,选中或反选所有清单、写清单到任意存储格、重新加载数据等操作。也可以重新加载另外一区域或某几列的数据,也可以重新设定功能的生效存储格范围。 【快捷取日期】 随存储格即时移动的快捷日期数据清单,且有已录入日期的记忆功能。所有快捷取数工具都具有使用30秒钟则自动隐藏功能,用户可以决定是否取消其自动隐藏清单。 【快捷综合取数】 功能较功能更强大,支持同时取6个不同存储格区域(或列)为6个唯一值清单,并在指定的6个不同的生效范围自适应地显示对应的清单。清单的最后6项也为子程序功能,能完成相关操作。且支持重新加载数据及重设定生效存储格范围。 财 务 工 具 【自动填充】 不同于EXCEL的CTRL+D功能,能对选中的某列数据不同存储格区域的空白处,取相邻的上一不为空的存储格内容同时作数据源的自动填充。1分钟内能处理手工需几小时才能完成的几万ERP或KingDee原始数据。极力推荐的工具之一。 【取唯一值】 能瞬间取任意存储格区域的内容为不含重复值的唯一值清单,加载到工具中并提供随时随地调用,具有重复加载与读写的特点。 【添加注解】 可视化地窗体添加与修改注解功能。提供50种美观大方的批注样式供选择,支持图片背景批注与批量写批注。最大的优点是将指定的任意区域按每个存储格内容为一加入到当前批注中,允许批注内容中是否显示号。 【连接字符串】 可视化地窗体连接字符串功能。能将最多三个任意区域存储格(或列)的内容按自定的分隔符号连接成一个字符串写入指定的存储格或新工作表中。可以生成含重复值与不含重复值并可选是否排序的连接字符串。连接上万个字符只需短短1分钟即完成。 【隔插入】 在当前工作表中允许从M到N,隔X插入Y,并允许是否需复制标题Z。 【制作工资条】 瞬间将工资明细表生成工资条,方便打印并裁剪。可以自己定义工资条标题的数以及相隔数、插入数等。并能动态地显示运过程,支持程序运后中途暂停。 【恢复工资条】 能将已生成工资条的工资明细表,快速地还原为初始状态,支持多种参数设定。 【生成数据列】 生成发票号码序列的得力助手,可以生成任意的奇偶数列,差值或倍值或者递增、递减的任意有理数数据序列,支持先后列与先列后两种方式,支持瞬时恢复清除。 【取RMB张数】 根据员工的工资计算需要多少张100元、50元......1元的钞票,可以批量累计计算。发现金工资的财务工作者的必备工具之一。 【数字转英文】 将选中区域(默认)或已使用区域存储格的金额数字转换成英文格式显示的表达字符串,为三资企业制作客户外汇付款通知书的理想工具。 【文本转EXCEL】 将文本文件按指定的分隔符号分隔一次性导入到EXCEL文档中。提供两种导入方式。 【EXCEL转文本】 将当前工作表中存储格的内容按指定分隔符号导出为TEXT文本,此为银代发工资数据与邮局或银传递数据的便利工具之一。并提供两种方式的转换。 成本核算 【取唯一值】 还在使用或功能对数据进唯一值的繁锁操作吗? 本工具可快捷方便地取任意选中区域的存储格内容为唯一值清单,快捷且高效。 【取产品型号】 功能较在字符串中取数字强大多倍。能批量取某列存储格按指定长度的数字并允许特定数字串的获取,例如M76000,RC76000等。而小于指定长度的数字串则不予获取。 【快速选定数据】 可瞬间选中与用户指定内容相同的当前工作表中所有存储格,方便选定、清除内容或其他操作,支持选中字体彩色是否着色。 【取型号使用范围】 取MATCH的两列数据(Relating Area)中对应MODEL的使用范围(Where Used)。 常 用 工 具 【繁简转换】 可视化的繁简体GB与BGK码以及GB2与BIG5码相互转换,可以复制文本到当前窗体中文本进转换,也可以实现单个文件或批量文件的转换。在窗体中双击文本字符串尾即可实现自动选定文本并自动复制功能。本工具较同类转换工具准确率达100%。 【背景颜色】 提供可视化的可选择着色方式的背景着色功能,默认启用智能着色。 【文件批量改名】 功能完善的文件或图片批量改名工具。细分为多方式改名,优点明显。例:替换字符串就支持起始长度、替换个数、GB2与BIG5码相互转换等多选项操作,也支持文件扩展名的修改。现为市场上功能最强大的一款文件及图片批量改名工具。 【工作表保护】 对当前工作薄中的各工作表批量一次性用指定密码进锁定与解锁操作。 【工作表隐藏】 对当前工作薄中的各工作表批量一次性进隐藏与取消隐藏操作。 【新建工作表】 批量新建或者复制工作表,依指定存储格内容可以瞬间建立/复制1到255个。还可以在新建或复制时全自动命名。分为自动新增方式与依指定存储格内容两种方式。 【插入批注背景】 可以选定任意一幅图片为批注背景来插入一个带图片背景的批注。可视化窗体操作,可随时更换批注样式,也支持批量多存储格样式修改。 【插入数】 对工作表隔插入并可以复制标题,其中对相隔数、插入数等可以自定义。 【注解样式】 可以插入多达50种样式的注解,支持随时切换当前注解样式为指定的样式。 【工作表拆分】 将当前工作表的某列数据按指定条件拆分成多个工作表,可以用任意列的数据以及选定的数据做为拆分条件。 【列奇偶选择】 可视化对当前工作表的与列进快速的奇偶或奇偶列快速选定操作。 【查找与替换】 增强型EXCEL内置查找与替换功能。可以按设置搜索任何字符串(包括*或?符以及公式中包含的某字符),也可以将搜索结果写入到一新的工作表中以备查。 【工具箱选项】 集成工具箱的基本选项设置。基本分为。其中功能窗体显示区(NoTaskbar)功能可设置本工具启用的窗体图标是否在状态栏显示,并允许切换功能。 扩 展 工 具 【屏幕截图】 可以截取屏幕任意一区域并复制或另存为图片,可随意更改大小,操作灵活性特强。 【屏幕取色】 经典的屏幕取色工具,可取任意一处屏幕颜色到指定的存储格中,可显示为RGB颜色值或十六进制的颜色值,为VBA开发人员的辅助工具之一。 【万年日历】 可以查询所有节、假日信息和公农双历,以及计算两时点间的相隔天数等。 【LED时钟与样式】 超漂亮的LED时钟,有默认时钟、蓝色时钟、经典时钟三种样式供选择。 【系统常用工具】 系统常用工具的快捷调用,例如:计算器、记事本、WORD、画图板。 【隐藏选项卡】 可以隐藏Excel2007及2010功能区的各选项卡(如:开始、插入、开发工具等)。 图 片 工 具 【选择本表图片】 将工作表中的图表导出为图片保存起来。 【批量导入图片到右列】 批量将图片导入到工作表中对应图片名字的右边。 【将选区转换成图片】 将工作表中的当前选中区域另存为图片。 【一键导出图形】 将工作表中的图片导出为图片文件。 【导入图片到工作表】 将磁盘中的图片导入到工作表中。 【删除选中区域图形】 将工作表中当前选中区域的所有图片与图形删除。 【删除所有导入图形】 将工作表中存在的所有图片与图形瞬间删除。 【批量导入图片】 将指定文件夹或包含子文件夹中所有图片瞬间(也可以按对应名称)按指定图片大小导入EXCEL中。允许一次性多图片格式(*.JPG/*.GIF/*.BMP/*.PNG),且支持模糊与非模糊方式导入图片,还可以在导入的图片上显示其文件名称以易于管理。 【批量导出图片】 将EXCEL中指定某列中的图片按显示图片大小导出到指定的文件夹中。 批 注 工 具 【插入样式批注】 提供50种花样的批注供选择,可随时更换,且美观大方。 【插入图片批注】 不仅提供多样的批注供选择,且支持批注中加入图片背景。 【批量修改批注】 批量一次性修改选中存储格区域批注的样式。 【批量图片批注】 可批量将图片生成带图片背景的批注。 【批量名称图片批注】 可批量将图片依对应名称生成带图片背景的批注。 【显示与隐藏批注】 显示或隐藏工作表中选中区域的批注。 【可视化批注】 可视化地窗体操作添加与修改注解完整功能。 安全工具 【工作表解密】 可以破解工作表密码和工作簿密码。在不知道密码的前提下找回密码。 【VBA工程解密】 将有密码的VBA工程代码破解,直接打开即可修改代码。相当于VBA工程免密查看。 【隐藏与显示磁盘】 隐藏与显示磁盘本地磁盘盘符(无需重启动)。 【端口进程查询】 查看本机开放的系统端口以及使用该端口的进程一览表。 系 统 工 具 【锁定屏幕】 快捷一键式登出当前用户并锁定电脑,类似于CTRL+ALT+DEL功能。 【系统待机】 使用此功能可以达到节能及锁定电脑一键式进入系统待机状态,再次使用时恢復速度是最快的,一般五秒之內就可以恢復到上次使用状态而无需要重新开机了。 【锁定鼠标】 可即时锁定屏幕鼠标且支持密码锁定,有密码才可以解锁恢复被禁止的所有操作,能屏蔽所有的系统按键如:ALT+F4、CTRL+ALT+DEL、ESC、WIN等,支持桌面锁。 【任务管理器】 增强型的系统任务管理器,提供进程的PID及路径、进程文件属性及详细说明,以及进结束进程与删除进程及设置LEVEL等操作。 【系统功能信息】 系统功能调用及相关信息,关闭电脑、重启电脑、电脑使用时间、磁盘剩余空间。 【查看IP信息】 查看本机LAN局域网的IP地址以及WAN外部网的公共IP地址(需要接入Internet)。 【显示桌面】 快捷的一键式显示桌面,有时桌面图标找不到时特别有用。 【资源管理器】 快捷的打开系统IE资源管理器,便于游览与管理文件夹与文件目录。 【系统分区表】 查看系统分区表与引导区(BOOT)内容,备份起来以防止CIH病毒的破坏。 函数工具 【插入函数】 以对话窗体方式插入类别中大约一百个左右的自订增益函数。 【函数帮助】 提供最常用的绝大多数自订增益函数的详细说明信息。 【函数实例】 以实例文档Function Sample.xls来列举常用自订增益函数的使用方法举例。 快 捷 工 具 【快捷简转繁】 将当前工作表中所有存储格的简体字批量转换成繁体,如果选NO时,则还包括当前工作表中的所有窗体控件中的文本也进转换。 【快捷繁转简】 将当前工作表中所有存储格的繁体字批量转换成简体,如果选NO时,则还包括当前工作表中的所有窗体控件中的文本也进转换。 【隐藏非使用区】 对当前工作薄中各工作表未使用区域进快速隐藏。 【删除空白】 以当前工作表已使用区域中的空快速删除。 【反向选择】 选择当前选中区域相反的已使用存储格。 【数字转英文】 将当前工作表中所有存储格的金额数字转换成英文格式显示的表达字串,在确认之前可以更改选项以转换为值或用公式表达两种方式供选择。 【删除超级链接】 瞬间删除当前工作薄中所有的超级链接。 【删除工作薄链接】 瞬间删除当前工作薄中所有的地址引用链接。 【工作表目录】 对当前工作簿的所有工作表建立目录与编号,且生成链接,单击可以打开工作表。 【建文件夹目录】 可按选中存储格内容或者当月日期天数值来创建文件夹到指定文件夹中。 【建工作表及目录】 可按选中存储格内容或者当月日期天数值来创建EXCEL文档到指定文件夹中。 【取文件目录】 对指定文件夹中的文件在Excel中建立目录,且生成链接,单击可以打开对应的文件。 【IE论坛收藏】 将IE游览器收藏夹中的WEB地址名称及链接写入EXCEL中保存起来。 【ABC序列】 为EXCEL生成一个可用鼠标拖值处理的A-Z字母序列,一次生成,重复使用。 【百家姓序列】 为EXCEL生成一个可用鼠标拖值处理的百家姓序列,一次生成,重复使用。 【压缩工作薄】 对当前工作薄进压缩减肥操作,适当缩小文件大小。 【数字小字转大写】 将选中区域存储格的小写金额批量转换成中文大写金额。 【数字大写转小写】 将选中区域存储格的中文大写金额批量转换成小写金额。 【筛选复制可见】 在筛选状态下,对选中区域复制时不复制已隐藏的内容,支持Excel2003以下版本。 【选中相同值】 可瞬间选中与当前某存储格内容相同的工作表中所有存储格,比多次选中操作省时。 【修复EXCEL】 当您的Excel某些功能无法使用时,或者无缘无故多出很多菜单、工具栏时,本工具可以瞬间恢复Excel到默认状态,本功能较同类工具清除更彻底。 合 并 唯 一 值 工 具 【筛选选区唯一值】 以选择区域左边一列为条件进唯一值筛选,输入1则删除重复值所在,输入2则隐藏重复值所在。 【消除选区重复值】 将选择中重复出现的数据删除,显示唯一值的数据序列。 【突出显示重复值】 将选择中重复出现的数据均以圈号标示出来。 【生成随机不重复值】 在A列生成指定数据范围1-9000000以及上的随机数序列。 【控制单列不重复值】 可控制任意一列(取值1-255表示A-IV列)存储格内容的是否出现重复值,当出现重复值时则自动适时弹出信息提醒,若取消控制(取0或空值)即可。 【可还原之合并】 用此功能对存储格合并后,可在任何时候还原为合并前的状态。 【还原合并数据】 对一列中合并后的单元格取消合并,且恢复合并前所有数据。 【还原合并且填充】 对一列中合并后的单元格取消合并,且用第一个存储格值进向下与向右填充。 【合并数据并复制】 可以将一个区域的数据直接复制粘贴到一个单元格中。 【合并数据并居中】 合并居中数据,可以保留合并前的所有数据。而且取消合并后可以还原数据,强过Excel自带的合并 居中多倍。 【可视化合并数据】 用显示窗体可视化操作对存储格字符串进合并连接。 增强插入 【插入FLASH动画】 将Flash动画嵌入到工作表中,并播放,可以随意定制Flash动画的显示大小和位置。动画嵌入工作表中,删除FLASH原文件不影响Excel中的效果,且允许是否需要保留Flash的缩放等操作菜单。 【插入GIF动画】 将GIF动画插入到工作表中播放,可以随意定制GIF的大小和位置,删除GIF原文件不影响Excel中的效果。 【插入MV动画】 将MV等多媒体动画或电影插入到工作表中播放,可以定制MV视频的大小和位置。 增 益 工 具 【存储格加解密】 对工作表选区的数据进加密,转换成乱码,有密码才可以查看。第二次执时即可以恢复数据。理论上支持反复加密,但解密时需用相对应的密码。 【文本文件加密】 对文本TXT文件进加密与解密操作。 【禁用USB使用】 禁止USB的即插即用功能,防止他人非正常使用外存储设备(无需重启动)。 【启用USB使用】 恢复USB的即插即用功能(无需重启动)。 【清除历史记录】 彻底清除垃圾文件、临时文件、IE缓存、历史记录、升级下载记录、IE地址记录、运记录等,为系统磁盘赢得更多的剩余空间,较同类清除工具效果更明显。 【修改文件时间】 可随心所欲修改文件的创建、修改、访问时间,包括年月日时分秒,支持修改单个文件、批量文件以及包括子文件夹等多种方式修改。 【下载地址转换】 可在讯雷(Thunder)、网际快车(FlashGet)、QQ旋风(Qqdl)、普通地址(Http)之间相互转换下载地址,这样就无需同时安装多个下载工具了,为下载提供了方便。 【星号密码查看】 拖动图标到任何程序窗体中的密码框上方,即可将其密码显示出来。用IE密码查看器还可查看IE游览器(包括傲游览器)WEB网页中的密码框中的密码。 【程序调试工具】 用作程序自身的DEBUG调试与程序崩溃的自动修复等。 动 画 工 具 【鼠标跟随动画】 非常灵活的鼠标跟随动画,有四种样式自动切换且支持各种显示参数值设定,可以修改参数固定为其中的一种动画方式。 【显示茸茸小兔】 可爱的茸茸小兔显示在屏幕右下角,仿瑞星杀毒软件的卡卡动画。 【启用特效动画】 随鼠标选中不同存储格变化而出现的6个绿色自转动环的特效动画,第一次有了“这是在使用EXCEL中的功能吗”的惊奇。有随鼠标移动(选YES)与不随鼠标移动两种方式,可以通过禁用此动画。动画工具中的经典之一。 【多个休闲动画】 具有休闲与娱乐于一体的多个动画:喜悦黄鹂、勤劳蜜蜂、经梅迎春、青青竹子、时针指南、葡萄熟了、果实累累、花好月季等。为EXCEL增添一丝喜色。 【关闭所有动画】 一键迅速关闭所有已经打开的休闲动画。 休 闲 工 具 【媒体播放器】 简洁媒体播放器,可打开MP3、MP4、MPG、DVD等几乎所有格式的多媒体文体。 【播放FLASH】 支持打开所有SWF格式的FLASH文件进播放,可以暂停或按帧播放。 【屏幕放大镜】 可以缩放屏幕任意区域,支持0.5倍、1倍、2倍、3倍、6倍放大效果。 【屏幕画笔】 可以手写并在当前屏幕背景图上圈、点、划、作波浪标记等均可,并可将结果保存为图片文件或插入到Excel中,可自定画笔粗细与颜色选择,支持随时清除所有标记。 【俄罗斯方块】 非常经典的俄罗斯方块积分小游戏,支持鼠标操作与键盘方向键(或WSADZ键)两种操作方式,空格与回车键为暂停切换键。 【在线音乐】 非常流的网络在线音乐播放器,自动加载最近音乐排榜,也可按名字或歌星搜索到最热的歌曲并加到播放清单中。 开 发 辅 助 【获取系统菜单】 获取VBA编程人员需要的关于菜单及及控件的名称及ID等相关信息。 【生成系统图标A】 VBA编程人员常用的工具。可以每页500项查询Excel内部图标及FaceId。 【生成系统图标B】 VBA编程人员常用的工具。增强查询与写Excel内部图标的ID号于空白的工作表中。 【显示基本颜色值】 显示最基本的56种基本颜色ID、名称与相对应的RGB颜色值以及网页颜色值。 【删除注释】 可以瞬间清除当前工作薄中的所有模块、类模块及VBA子程序中的所有注释语句。 定制开发 【定制功能模块】 根据客户需求定制开发的模块功能:Aging库存报表、ERP存货报表、BOM表整理、标签制作、付款通知书、报表格式转换等。 帮助工具 【集成工具箱】 关于本工具必要帮助以及作者(梁瑞春)的EMAIL、个人主页、联系方式等相关信息。 【中英文显示】 支持繁简体操作系统,以及多语言显示:中文简体(黙认)、中文繁体、英文显示。 【更换皮肤】 支持窗体界面的皮肤切换,具有二十多款超漂亮的皮肤包供免费选择。 【仿2003样式菜单】 开始使用2007版朋友来说,有很大的不适应。这个插件模拟了一个Excel2003样式的菜单,目的就是方便那些从Excel2003转向使用2007或2010版的朋友使用。 100个左右的自订EXCEL内置增益函数: 分类 函数名称 功能介绍 字  符  转  换 GB2BIG5 将存储格的简体字(GB2)转换成真正繁体字(BIG5)。一个参数即单元格引用。 BIG5GB2 将存储格的真正繁体字(BIG5)转换成简体字(GB2)。一个参数即单元格引用。 JianToFan (JtoF) 将存储格的简体字(GB2)转换成繁体字(GBK)。一个参数即单元格引用。 FanToJian (FtoJ) 将存储格的繁体字(GBK)转换成简体字(GB2)。一个参数即单元格引用。 ColumnNumber 将某字符所表示的列(或某单元格引用)转换为数字形式所表于的列号。一个参数取值范围为A--AZ。例如: ColumnNumber("AZ")=52表示为第52列。 ColumnText 将某数字所表示的列号(或某单元格引用)转换为字符形式所表于的列。一个参数取值范围为1--702。例如: ColumnText(256)=IV表示为IV列。 NumUpper 将存储格的小写数字金额转换为中文大写金额。一个参数即单元格引用。 NumLower 将存储格的中文大写金额转换为小写数字金额。一个参数即单元格引用。 NumtoEnglish 将存储格的小写金额转换为英文字符串表示的金额。第一个参数即单元格引用,第二个参数可省略,最标准的英文表达方式。 SpellNumber 将存储格的小写金额转换为英文字符串表示的金额。一个参数即单元格引用,适合美国美元表达习惯。 TextReverse 反转(倒置)文本字符串函数。一个参数即字符串表达式或单元格引用。 字  符  操  作 ChineseBiHua 取存储格的中文汉字的笔画。一个参数即单元格引用或中文汉字字符串。 Found 查找某字符在某字符串表达式的位置。第一个参数为要查找的字符串,第二个参数为字符串表达式或单元格引用,第三个参数为查找到的第N个字符串,若省略则表示查找第1个字符串。例如:Found("A","ABCDAEFGHAAA",3)=10 GetModelNumber 取产品MODEL型号。第一个参数为产品的英文数字描述的字串,第2个参数为指定MODEL型号的长度(默认为4),第3个参数为MODEL型号间的分隔符号,可任意。 GetMoneyPcs 取存储格的数字金额中包含对应人民币面额(100/50/20/10/5/2/1等)的张数。第一个参数即单元格引用,第二个参数为人民币(RMB)面额。 GetTax 计算个人所得税工具。第一个参数为计税总额,第二个参数为扣除数额。 GetTypeValue 将存储格的内容按需求进字符分离与表达式计算。第一个参数即单元格引用,第二个参数即类型取值范围为1-10(1-只保留数字. 2-只保留字母. 3-只留中文(包含空格). 4-只保留数字和小数点. 5-只保留数字和运算符号+-*/^. 6-只保留字母和数字. 7-去掉数字. 8-去除英文大小写字符. 9-去除中文. 10-这里指去除所有空格符)。 HZtoPY 将存储格的内容中的中文汉字转换为拼音。第一个参数为单元格引用,第二个参数为是否只对汉字转换(1或0),第三个参数为间隔符号。后面两个参数可以省略。 NumInt 将存储格的数字金额转换为按整数四舍五入的整数金额。第一个参数即单元格引用,第二个参数为人民币面额(取值为5或10)。例如:NumInt(9825.65,5)=9825, NumInt(9825.65,10)=9830。面值参数越大差异越大。 NumIntDown 将存储格的数字金额转换为向下按整数四舍五入的整数金额。第一个参数即单元格引用,第二个参数为人民币面额(取值为5或10)。例: NumIntDown(9825.65,5)=9820, NumIntDown(9825.65,10)=9820。面值参数越大差异越大。 NumIntUp 将存储格的数字金额转换为向上按整数四舍五入的整数金额。第一个参数即单元格引用,第二个参数为人民币面额(取值为5或10)。例如:NumIntUp(9825.65,5)=9830, NumIntUp(9825.65,10)=9830。面值参数越大差异越大。 ReplaceIn 字符替换含数。第一个参数为字符串表达式或单元格引用,第二个参数为要查找的字符串,第三个参数为新替换的字符串,第四个参数为从找到的第N个字符开始替换。 RightFind 从右向左查找字符串的函数。例如:RightFind("BCADEA","A")=6 存 储 格 操 作 CheckId 身份证信息查询及验证函数。一个参数即为单元格引用或身份证号码字符串。返回信息为:地区信息+出生年月日+性别+出生序号+是否验证成功。可取身份证前2位或4位或6位或10位或14位(也可后面以0数字补充)即显示地区信息;完整应取18位身份证字串数据。 ClearBlank 消除空值函数。可以选择多多列,按先后列之方式返回值.两个参数,第一个参数为存储格区域引用,第二个参数为需要取数的序号(1--N)。 ColorCount 取存储格范围内某颜色值的存储格个数。第一个参数为储格范围引用,第二个参数为某颜色Index值或某单元格引用。 ColorSum 按背景颜色对区域值求和。第一参数为求和区域,第二参数为背景颜色参照值。 FormulaView 显示公式函数。提取单元格中的公式,第一个参数单元格引用,第二个参数可省略。 GradeAverage 评委评分函数。计算引用存储格区域中去除最大值与最小值之后再求平均数。 GetFolderPathName 用于创建带链接的文件目录,有二个参数,第一参数为指定路径的字符串,第二参数指定取值编号(数字序号1--N)。 GetComment 提取存储格批注中的文字。只有一个参数,即单元格引用。 CommonItem 返回两个存储格区域的共有项目。前两个参数为区域,第三参数为取数序号1--N。 VarianceItem 返回第一区域中有而第二区域没有的项目。前两个参数是区域,第三参数为序号。 SplitGetValue 按分割符取数。第一参数为单元格引用,第二参数表示取第N个字符串,第三个参数表示分割符号,可任意字符。 UnionString 将区域字符进合并。第一参数为分割符,第二参数为引用区域。可以用""表示不使用分割符。第三参数开始为引用区域,可以有1到254个区域(Excel2003中是1到29个)。也还可以直接用文本做参数。 普通函数 BookName 取工作薄名称目录。一个参数,输入工作薄序号即返回相应工作薄名称。 SheetName 取工作表名称目录。一个参数,输入工作表序号即返回相应工作表名称。 GoldPoint 数学中黄金分割点的精确取值。 PI 数学中PI(π)的精确取值。PI=3.1415926535897932384626433832795. 系统函数 CloseExcel 不保存当前文档而直接退出EXCEL。 ComputerChangeName 更改计算机名称。一个参数即任意的名称字符串。 ComputerLock 电脑进入登出锁定状态。一个可选参数可以省略。 ComputerSleep 电脑进入待机休眠状态。一个可选参数可以省略。 USB USB盘的禁用与恢复启用。一个字符串参数即Enabled为启用,Disabled为禁用。 对于无法安装的朋友请注意以下4点 : 一:必须是完整版OFFICE,不能是绿色版、精简版,它们不支持COM加载宏. 二:必须关闭Excel状态下安装或者删除工具,安装后重启Excel即可. 三:如果是VISTA或WIN 7,必须以管理员用户安装,且从控制面板中关掉用户帐户控制(UAC)功能. 四:如果您装了其它的EXCEL工具,请先关掉它,它们有可能删除本工具的菜单. 安装方法:(也可参考安装说明.TXT文档) 安装说明与使用规则: 1.1.绿色版本安装:管理员用户运Setup.exe进安装程序! 运UnSetup.exe进反安装程序! 1.2.绿色版本安装:非管理员用户可运Register.bat进安装程序! 运UnRegister.bat进反安装程序! 2.1.若安装并使用后因误操作报错时(例如EXCEL打开后未能加载工具菜单),可以卸载后重新安装到另外不同的目录中即可恢复正常.(因微软COM的保护措施而致)! 2.2.建议每天只打开EXCEL主程序一次为宜,保持打开状态不要关闭.(文档则可任意多次打开). 3.1.由于免费标签插件ExcelTab.dll与系统的兼容性问题,安装后在使用过程中若出现屏幕微小抖动或影响正常使用时,请将安装目录Librarys中的ExcelTab.dll 文件改名或删除即可! (不过出现的几率为1%左右). 或者请下载后24小时之内将其删除即可,而不会影响本工具箱的功能! ======================================================================================== EXCEL集成工具箱V8.0增强版修正内容: 1.修正LED时钟自动启动的BUG.在工具箱选项中新增加其开关设定. 2.修正EXCEL2007以上版本中不能手工设定不同工作表网格线颜色的问题. 关闭了原自动设定网格线颜色的功能. 3.改进EXCEL2007及EXCEL2010版本中COM加载时间过长的问题,提升了原版的启动速度. 4.提高程式代码执与加速功能,实了程序稳定性与谨慎性测试并通过. 5.新增CheckId()身份证信息查询及验证函数. 6.新增4个皮肤包并修正更换皮肤设置后重启即能生效. 未注册版最多支持30个皮肤包,注册版允许最多皮肤包99个. ========================================================================================= 需知更多请访问官方论坛: Http://exceltools.5d6d.com   作者QQ:1058697543
Excel集成工具箱6.0是利用VBA(Visual Basic for Applications)语言编写的增强应用型插件。包括160个菜单功能和100个左右 自定义函数,集160个工具于一身,但体积小于15MB。当安装集成工具箱后,如果您使用Excel 2003,则将产生【工具箱】菜单, 包括160多个子菜单;如果您使用Excel 2007或者2010,将产生【集成】与【工具箱】功能区。根据各功能的特点,对子菜单 作了18个分类, 而在函数向导对话框中也生成100个左右新的函数,用于扩展Excel的计算功能。且所有功能都通用于 Excel 2002、2003和2007、2010。支持中英文显示与繁简体操作系统、拥有20多款华丽的皮肤界面,支持Excel2007全面 隐藏选项卡,这个插件还模拟了一个Excel2003样式的菜单,目的就是方便那些从Excel2003转向使用2007或2010版的朋友使用。 =================================================================================================================== 下载地址(集成工具箱本身3.60MB,解压后超过15MB,不含帮助文件): 网盘下载:http://www.brsbox.com/jackeyliang(含帮助,解压超过40MB) 多特软件站下载: http://www.duote.com/soft/1495.html EXCEL集成工具箱V7.0完整版.rar (19.42MB) 绿色软件站下载: http://soft.syue.com/soft/98/99/2010/2010081491963.html EXCEL集成工具箱V7.0完整版.rar 软件屋下载: http://soft.softhouse.com.cn/software/show/76357.html EXCEL集成工具箱V7.0完整版.rar 大观软件站下载: http://guansky.com/soft/html/15828.html EXCEL集成工具箱V7.0完整版.rar IT资讯平台下载: http://download.it168.com/547/1483/index.shtml EXCEL集成工具箱V7.0完整版.rar =================================================================================================================== 本工具箱160个菜单工具的功能介绍如下: 分类 功能名称 功能介绍 繁简转换 【简体转繁体】 将选中区域存储格的简体字批量转换成繁体。 【繁体转简体】 将选中区域存储格的繁体字批量转换成简体。 【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的加总求和,以及显示选区包含的数字、字符、汉字的个数等信息。 【GB2转BIG5】 将选中区域存储格的简体字(GB2)批量转换成繁体操作系统的繁体(BIG5)。 【BIG5转GB2】 将选中区域存储格的繁体字(BIG5)批量转换成简体操作系统的简体(GB2)。 完 美 背 景 着 色 【选区背景】 默认启动智能着色方式,此功能会清除一部分背景颜色,但对工作表中的条件格式会作完全保留,丝毫没有影响。最大的特点是支持屏幕列捲轴的操作而不影响显示。 【选区背景选择】 进着色功能切换,支持着色、列着色、与列同时着色、智能着色、选区着色、反向着色共6种方式供选择,可以自定义56种基本及颜色板任意着色颜色。 【条件背景】 默认启动智能着色方式,此功能不会清除背景颜色,但会对工作表中的条件格式作自动清除。最大的特点是支持屏幕列捲轴的操作而不影响显示。 【条件背景选择】 进着色功能切换,支持着色、列着色、与列同时着色、智能着色、选区着色、反向着色共6种方式供选择,可以自定义56种基本及颜色板任意着色颜色。 【高级背景】 将选择的颜色标示,以突出当前,有利于数据查看。可以随心所欲地定义颜色,还可以自由调整颜色的深浅。本工具相对于同类工具有不破坏背景色、条件格式、复制粘贴和撤消功能之优点。 【高级背景选择】 背景着色的高级功能,支持着色、列着色、与列同时着色共3种方式供选择。 快捷取数 【快捷取数列】 随存储格即时移动的快捷数据清单,可取任意区域的数据为唯一值清单,提高数据录入效率。最重要的是清单的最后6项为子程序功能,点击则可以完成增加清单显示宽度,选中或反选所有清单、写清单到任意存储格、重新加载数据等操作。也可以重新加载另外一区域或某几列的数据,也可以重新设定功能的生效存储格范围。 【快捷取日期】 随存储格即时移动的快捷日期数据清单,且有已录入日期的记忆功能。所有快捷取数工具都具有使用30秒钟则自动隐藏功能,用户可以决定是否取消其自动隐藏清单。 【快捷综合取数】 功能较功能更强大,支持同时取6个不同存储格区域(或列)为6个唯一值清单,并在指定的6个不同的生效范围自适应地显示对应的清单。清单的最后6项也为子程序功能,能完成相关操作。且支持重新加载数据及重设定生效存储格范围。 财 务 工 具 【自动填充】 不同于EXCEL的CTRL+D功能,能对选中的某列数据不同存储格区域的空白处,取相邻的上一不为空的存储格内容同时作数据源的自动填充。1分钟内能处理手工需几小时才能完成的几万ERP或KingDee原始数据。极力推荐的工具之一。 【取唯一值】 能瞬间取任意存储格区域的内容为不含重复值的唯一值清单,加载到工具中并提供随时随地调用,具有重复加载与读写的特点。 【添加注解】 可视化地窗体添加与修改注解功能。提供50种美观大方的批注样式供选择,支持图片背景批注与批量写批注。最大的优点是将指定的任意区域按每个存储格内容为一加入到当前批注中,允许批注内容中是否显示号。 【连接字符串】 可视化地窗体连接字符串功能。能将最多三个任意区域存储格(或列)的内容按自定的分隔符号连接成一个字符串写入指定的存储格或新工作表中。可以生成含重复值与不含重复值并可选是否排序的连接字符串。连接上万个字符只需短短1分钟即完成。 【隔插入】 在当前工作表中允许从M到N,隔X插入Y,并允许是否需复制标题Z。 【制作工资条】 瞬间将工资明细表生成工资条,方便打印并裁剪。可以自己定义工资条标题的数以及相隔数、插入数等。并能动态地显示运过程,支持程序运后中途暂停。 【恢复工资条】 能将已生成工资条的工资明细表,快速地还原为初始状态,支持多种参数设定。 【生成数据列】 生成发票号码序列的得力助手,可以生成任意的奇偶数列,差值或倍值或者递增、递减的任意有理数数据序列,支持先后列与先列后两种方式,支持瞬时恢复清除。 【取RMB张数】 根据员工的工资计算需要多少张100元、50元......1元的钞票,可以批量累计计算。发现金工资的财务工作者的必备工具之一。 【数字转英文】 将选中区域(默认)或已使用区域存储格的金额数字转换成英文格式显示的表达字符串,为三资企业制作客户外汇付款通知书的理想工具。 【文本转EXCEL】 将文本文件按指定的分隔符号分隔一次性导入到EXCEL文档中。提供两种导入方式。 【EXCEL转文本】 将当前工作表中存储格的内容按指定分隔符号导出为TEXT文本,此为银代发工资数据与邮局或银传递数据的便利工具之一。并提供两种方式的转换。 成本核算 【取唯一值】 还在使用或功能对数据进唯一值的繁锁操作吗? 本工具可快捷方便地取任意选中区域的存储格内容为唯一值清单,快捷且高效。 【取产品型号】 功能较在字符串中取数字强大多倍。能批量取某列存储格按指定长度的数字并允许特定数字串的获取,例如M76000,RC76000等。而小于指定长度的数字串则不予获取。 【快速选定数据】 可瞬间选中与用户指定内容相同的当前工作表中所有存储格,方便选定、清除内容或其他操作,支持选中字体彩色是否着色。 【取型号使用范围】 取MATCH的两列数据(Relating Area)中对应MODEL的使用范围(Where Used)。 常 用 工 具 【繁简转换】 可视化的繁简体GB与BGK码以及GB2与BIG5码相互转换,可以复制文本到当前窗体中文本进转换,也可以实现单个文件或批量文件的转换。在窗体中双击文本字符串尾即可实现自动选定文本并自动复制功能。本工具较同类转换工具准确率达100%。 【背景颜色】 提供可视化的可选择着色方式的背景着色功能,默认启用智能着色。 【文件批量改名】 功能完善的文件或图片批量改名工具。细分为多方式改名,优点明显。例:替换字符串就支持起始长度、替换个数、GB2与BIG5码相互转换等多选项操作,也支持文件扩展名的修改。现为市场上功能最强大的一款文件及图片批量改名工具。 【工作表保护】 对当前工作薄中的各工作表批量一次性用指定密码进锁定与解锁操作。 【工作表隐藏】 对当前工作薄中的各工作表批量一次性进隐藏与取消隐藏操作。 【新建工作表】 批量新建或者复制工作表,依指定存储格内容可以瞬间建立/复制1到255个。还可以在新建或复制时全自动命名。分为自动新增方式与依指定存储格内容两种方式。 【插入批注背景】 可以选定任意一幅图片为批注背景来插入一个带图片背景的批注。可视化窗体操作,可随时更换批注样式,也支持批量多存储格样式修改。 【插入数】 对工作表隔插入并可以复制标题,其中对相隔数、插入数等可以自定义。 【注解样式】 可以插入多达50种样式的注解,支持随时切换当前注解样式为指定的样式。 【工作表拆分】 将当前工作表的某列数据按指定条件拆分成多个工作表,可以用任意列的数据以及选定的数据做为拆分条件。 【列奇偶选择】 可视化对当前工作表的与列进快速的奇偶或奇偶列快速选定操作。 【查找与替换】 增强型EXCEL内置查找与替换功能。可以按设置搜索任何字符串(包括*或?符以及公式中包含的某字符),也可以将搜索结果写入到一新的工作表中以备查。 【工具箱选项】 集成工具箱的基本选项设置。基本分为。其中功能窗体显示区(NoTaskbar)功能可设置本工具启用的窗体图标是否在状态栏显示,并允许切换功能。 扩 展 工 具 【屏幕截图】 可以截取屏幕任意一区域并复制或另存为图片,可随意更改大小,操作灵活性特强。 【屏幕取色】 经典的屏幕取色工具,可取任意一处屏幕颜色到指定的存储格中,可显示为RGB颜色值或十六进制的颜色值,为VBA开发人员的辅助工具之一。 【万年日历】 可以查询所有节、假日信息和公农双历,以及计算两时点间的相隔天数等。 【LED时钟与样式】 超漂亮的LED时钟,有默认时钟、蓝色时钟、经典时钟三种样式供选择。 【系统常用工具】 系统常用工具的快捷调用,例如:计算器、记事本、WORD、画图板。 【隐藏选项卡】 可以隐藏Excel2007及2010功能区的各选项卡(如:开始、插入、开发工具等)。 图 片 工 具 【选择本表图片】 将工作表中的图表导出为图片保存起来。 【批量导入图片到右列】 批量将图片导入到工作表中对应图片名字的右边。 【将选区转换成图片】 将工作表中的当前选中区域另存为图片。 【一键导出图形】 将工作表中的图片导出为图片文件。 【导入图片到工作表】 将磁盘中的图片导入到工作表中。 【删除选中区域图形】 将工作表中当前选中区域的所有图片与图形删除。 【删除所有导入图形】 将工作表中存在的所有图片与图形瞬间删除。 【批量导入图片】 将指定文件夹或包含子文件夹中所有图片瞬间(也可以按对应名称)按指定图片大小导入EXCEL中。允许一次性多图片格式(*.JPG/*.GIF/*.BMP/*.PNG),且支持模糊与非模糊方式导入图片,还可以在导入的图片上显示其文件名称以易于管理。 【批量导出图片】 将EXCEL中指定某列中的图片按显示图片大小导出到指定的文件夹中。 批 注 工 具 【插入样式批注】 提供50种花样的批注供选择,可随时更换,且美观大方。 【插入图片批注】 不仅提供多样的批注供选择,且支持批注中加入图片背景。 【批量修改批注】 批量一次性修改选中存储格区域批注的样式。 【批量图片批注】 可批量将图片生成带图片背景的批注。 【批量名称图片批注】 可批量将图片依对应名称生成带图片背景的批注。 【显示与隐藏批注】 显示或隐藏工作表中选中区域的批注。 【可视化批注】 可视化地窗体操作添加与修改注解完整功能。 安全工具 【工作表解密】 可以破解工作表密码和工作簿密码。在不知道密码的前提下找回密码。 【VBA工程解密】 将有密码的VBA工程代码破解,直接打开即可修改代码。相当于VBA工程免密查看。 【隐藏与显示磁盘】 隐藏与显示磁盘本地磁盘盘符(无需重启动)。 【端口进程查询】 查看本机开放的系统端口以及使用该端口的进程一览表。 系 统 工 具 【锁定屏幕】 快捷一键式登出当前用户并锁定电脑,类似于CTRL+ALT+DEL功能。 【系统待机】 使用此功能可以达到节能及锁定电脑一键式进入系统待机状态,再次使用时恢復速度是最快的,一般五秒之內就可以恢復到上次使用状态而无需要重新开机了。 【锁定鼠标】 可即时锁定屏幕鼠标且支持密码锁定,有密码才可以解锁恢复被禁止的所有操作,能屏蔽所有的系统按键如:ALT+F4、CTRL+ALT+DEL、ESC、WIN等,支持桌面锁。 【任务管理器】 增强型的系统任务管理器,提供进程的PID及路径、进程文件属性及详细说明,以及进结束进程与删除进程及设置LEVEL等操作。 【系统功能信息】 系统功能调用及相关信息,关闭电脑、重启电脑、电脑使用时间、磁盘剩余空间。 【查看IP信息】 查看本机LAN局域网的IP地址以及WAN外部网的公共IP地址(需要接入Internet)。 【显示桌面】 快捷的一键式显示桌面,有时桌面图标找不到时特别有用。 【资源管理器】 快捷的打开系统IE资源管理器,便于游览与管理文件夹与文件目录。 【系统分区表】 查看系统分区表与引导区(BOOT)内容,备份起来以防止CIH病毒的破坏。 函数工具 【插入函数】 以对话窗体方式插入类别中大约一百个左右的自订增益函数。 【函数帮助】 提供最常用的绝大多数自订增益函数的详细说明信息。 【函数实例】 以实例文档Function Sample.xls来列举常用自订增益函数的使用方法举例。 快 捷 工 具 【快捷简转繁】 将当前工作表中所有存储格的简体字批量转换成繁体,如果选NO时,则还包括当前工作表中的所有窗体控件中的文本也进转换。 【快捷繁转简】 将当前工作表中所有存储格的繁体字批量转换成简体,如果选NO时,则还包括当前工作表中的所有窗体控件中的文本也进转换。 【隐藏非使用区】 对当前工作薄中各工作表未使用区域进快速隐藏。 【删除空白】 以当前工作表已使用区域中的空快速删除。 【反向选择】 选择当前选中区域相反的已使用存储格。 【数字转英文】 将当前工作表中所有存储格的金额数字转换成英文格式显示的表达字串,在确认之前可以更改选项以转换为值或用公式表达两种方式供选择。 【删除超级链接】 瞬间删除当前工作薄中所有的超级链接。 【删除工作薄链接】 瞬间删除当前工作薄中所有的地址引用链接。 【工作表目录】 对当前工作簿的所有工作表建立目录与编号,且生成链接,单击可以打开工作表。 【建文件夹目录】 可按选中存储格内容或者当月日期天数值来创建文件夹到指定文件夹中。 【建工作表及目录】 可按选中存储格内容或者当月日期天数值来创建EXCEL文档到指定文件夹中。 【取文件目录】 对指定文件夹中的文件在Excel中建立目录,且生成链接,单击可以打开对应的文件。 【IE论坛收藏】 将IE游览器收藏夹中的WEB地址名称及链接写入EXCEL中保存起来。 【ABC序列】 为EXCEL生成一个可用鼠标拖值处理的A-Z字母序列,一次生成,重复使用。 【百家姓序列】 为EXCEL生成一个可用鼠标拖值处理的百家姓序列,一次生成,重复使用。 【压缩工作薄】 对当前工作薄进压缩减肥操作,适当缩小文件大小。 【数字小字转大写】 将选中区域存储格的小写金额批量转换成中文大写金额。 【数字大写转小写】 将选中区域存储格的中文大写金额批量转换成小写金额。 【筛选复制可见】 在筛选状态下,对选中区域复制时不复制已隐藏的内容,支持Excel2003以下版本。 【选中相同值】 可瞬间选中与当前某存储格内容相同的工作表中所有存储格,比多次选中操作省时。 【修复EXCEL】 当您的Excel某些功能无法使用时,或者无缘无故多出很多菜单、工具栏时,本工具可以瞬间恢复Excel到默认状态,本功能较同类工具清除更彻底。 合 并 唯 一 值 工 具 【筛选选区唯一值】 以选择区域左边一列为条件进唯一值筛选,输入1则删除重复值所在,输入2则隐藏重复值所在。 【消除选区重复值】 将选择中重复出现的数据删除,显示唯一值的数据序列。 【突出显示重复值】 将选择中重复出现的数据均以圈号标示出来。 【生成随机不重复值】 在A列生成指定数据范围1-9000000以及上的随机数序列。 【控制单列不重复值】 可控制任意一列(取值1-255表示A-IV列)存储格内容的是否出现重复值,当出现重复值时则自动适时弹出信息提醒,若取消控制(取0或空值)即可。 【可还原之合并】 用此功能对存储格合并后,可在任何时候还原为合并前的状态。 【还原合并数据】 对一列中合并后的单元格取消合并,且恢复合并前所有数据。 【还原合并且填充】 对一列中合并后的单元格取消合并,且用第一个存储格值进向下与向右填充。 【合并数据并复制】 可以将一个区域的数据直接复制粘贴到一个单元格中。 【合并数据并居中】 合并居中数据,可以保留合并前的所有数据。而且取消合并后可以还原数据,强过Excel自带的合并 居中多倍。 【可视化合并数据】 用显示窗体可视化操作对存储格字符串进合并连接。 增强插入 【插入FLASH动画】 将Flash动画嵌入到工作表中,并播放,可以随意定制Flash动画的显示大小和位置。动画嵌入工作表中,删除FLASH原文件不影响Excel中的效果,且允许是否需要保留Flash的缩放等操作菜单。 【插入GIF动画】 将GIF动画插入到工作表中播放,可以随意定制GIF的大小和位置,删除GIF原文件不影响Excel中的效果。 【插入MV动画】 将MV等多媒体动画或电影插入到工作表中播放,可以定制MV视频的大小和位置。 增 益 工 具 【存储格加解密】 对工作表选区的数据进加密,转换成乱码,有密码才可以查看。第二次执时即可以恢复数据。理论上支持反复加密,但解密时需用相对应的密码。 【文本文件加密】 对文本TXT文件进加密与解密操作。 【禁用USB使用】 禁止USB的即插即用功能,防止他人非正常使用外存储设备(无需重启动)。 【启用USB使用】 恢复USB的即插即用功能(无需重启动)。 【清除历史记录】 彻底清除垃圾文件、临时文件、IE缓存、历史记录、升级下载记录、IE地址记录、运记录等,为系统磁盘赢得更多的剩余空间,较同类清除工具效果更明显。 【修改文件时间】 可随心所欲修改文件的创建、修改、访问时间,包括年月日时分秒,支持修改单个文件、批量文件以及包括子文件夹等多种方式修改。 【下载地址转换】 可在讯雷(Thunder)、网际快车(FlashGet)、QQ旋风(Qqdl)、普通地址(Http)之间相互转换下载地址,这样就无需同时安装多个下载工具了,为下载提供了方便。 【星号密码查看】 拖动图标到任何程序窗体中的密码框上方,即可将其密码显示出来。用IE密码查看器还可查看IE游览器(包括傲游览器)WEB网页中的密码框中的密码。 【程序调试工具】 用作程序自身的DEBUG调试与程序崩溃的自动修复等。 动 画 工 具 【鼠标跟随动画】 非常灵活的鼠标跟随动画,有四种样式自动切换且支持各种显示参数值设定,可以修改参数固定为其中的一种动画方式。 【显示茸茸小兔】 可爱的茸茸小兔显示在屏幕右下角,仿瑞星杀毒软件的卡卡动画。 【启用特效动画】 随鼠标选中不同存储格变化而出现的6个绿色自转动环的特效动画,第一次有了“这是在使用EXCEL中的功能吗”的惊奇。有随鼠标移动(选YES)与不随鼠标移动两种方式,可以通过禁用此动画。动画工具中的经典之一。 【多个休闲动画】 具有休闲与娱乐于一体的多个动画:喜悦黄鹂、勤劳蜜蜂、经梅迎春、青青竹子、时针指南、葡萄熟了、果实累累、花好月季等。为EXCEL增添一丝喜色。 【关闭所有动画】 一键迅速关闭所有已经打开的休闲动画。 休 闲 工 具 【媒体播放器】 简洁媒体播放器,可打开MP3、MP4、MPG、DVD等几乎所有格式的多媒体文体。 【播放FLASH】 支持打开所有SWF格式的FLASH文件进播放,可以暂停或按帧播放。 【屏幕放大镜】 可以缩放屏幕任意区域,支持0.5倍、1倍、2倍、3倍、6倍放大效果。 【屏幕画笔】 可以手写并在当前屏幕背景图上圈、点、划、作波浪标记等均可,并可将结果保存为图片文件或插入到Excel中,可自定画笔粗细与颜色选择,支持随时清除所有标记。 【俄罗斯方块】 非常经典的俄罗斯方块积分小游戏,支持鼠标操作与键盘方向键(或WSADZ键)两种操作方式,空格与回车键为暂停切换键。 【在线音乐】 非常流的网络在线音乐播放器,自动加载最近音乐排榜,也可按名字或歌星搜索到最热的歌曲并加到播放清单中。 开 发 辅 助 【获取系统菜单】 获取VBA编程人员需要的关于菜单及及控件的名称及ID等相关信息。 【生成系统图标A】 VBA编程人员常用的工具。可以每页500项查询Excel内部图标及FaceId。 【生成系统图标B】 VBA编程人员常用的工具。增强查询与写Excel内部图标的ID号于空白的工作表中。 【显示基本颜色值】 显示最基本的56种基本颜色ID、名称与相对应的RGB颜色值以及网页颜色值。 【删除注释】 可以瞬间清除当前工作薄中的所有模块、类模块及VBA子程序中的所有注释语句。 定制开发 【定制功能模块】 根据客户需求定制开发的模块功能:Aging库存报表、ERP存货报表、BOM表整理、标签制作、付款通知书、报表格式转换等。 帮助工具 【集成工具箱】 关于本工具必要帮助以及作者(梁瑞春)的EMAIL、个人主页、联系方式等相关信息。 【中英文显示】 支持繁简体操作系统,以及多语言显示:中文简体(黙认)、中文繁体、英文显示。 【更换皮肤】 支持窗体界面的皮肤切换,具有二十多款超漂亮的皮肤包供免费选择。 【仿2003样式菜单】 开始使用2007版朋友来说,有很大的不适应。这个插件模拟了一个Excel2003样式的菜单,目的就是方便那些从Excel2003转向使用2007或2010版的朋友使用。 100个左右的自订EXCEL内置增益函数: 分类 函数名称 功能介绍 字  符  转  换 GB2BIG5 将存储格的简体字(GB2)转换成真正繁体字(BIG5)。一个参数即单元格引用。 BIG5GB2 将存储格的真正繁体字(BIG5)转换成简体字(GB2)。一个参数即单元格引用。 JianToFan (JtoF) 将存储格的简体字(GB2)转换成繁体字(GBK)。一个参数即单元格引用。 FanToJian (FtoJ) 将存储格的繁体字(GBK)转换成简体字(GB2)。一个参数即单元格引用。 ColumnNumber 将某字符所表示的列(或某单元格引用)转换为数字形式所表于的列号。一个参数取值范围为A--AZ。例如: ColumnNumber("AZ")=52表示为第52列。 ColumnText 将某数字所表示的列号(或某单元格引用)转换为字符形式所表于的列。一个参数取值范围为1--702。例如: ColumnText(256)=IV表示为IV列。 NumUpper 将存储格的小写数字金额转换为中文大写金额。一个参数即单元格引用。 NumLower 将存储格的中文大写金额转换为小写数字金额。一个参数即单元格引用。 NumtoEnglish 将存储格的小写金额转换为英文字符串表示的金额。第一个参数即单元格引用,第二个参数可省略,最标准的英文表达方式。 SpellNumber 将存储格的小写金额转换为英文字符串表示的金额。一个参数即单元格引用,适合美国美元表达习惯。 TextReverse 反转(倒置)文本字符串函数。一个参数即字符串表达式或单元格引用。 字  符  操  作 ChineseBiHua 取存储格的中文汉字的笔画。一个参数即单元格引用或中文汉字字符串。 Found 查找某字符在某字符串表达式的位置。第一个参数为要查找的字符串,第二个参数为字符串表达式或单元格引用,第三个参数为查找到的第N个字符串,若省略则表示查找第1个字符串。例如:Found("A","ABCDAEFGHAAA",3)=10 GetModelNumber 取产品MODEL型号。第一个参数为产品的英文数字描述的字串,第2个参数为指定MODEL型号的长度(默认为4),第3个参数为MODEL型号间的分隔符号,可任意。 GetMoneyPcs 取存储格的数字金额中包含对应人民币面额(100/50/20/10/5/2/1等)的张数。第一个参数即单元格引用,第二个参数为人民币(RMB)面额。 GetTax 计算个人所得税工具。第一个参数为计税总额,第二个参数为扣除数额。 GetTypeValue 将存储格的内容按需求进字符分离与表达式计算。第一个参数即单元格引用,第二个参数即类型取值范围为1-10(1-只保留数字. 2-只保留字母. 3-只留中文(包含空格). 4-只保留数字和小数点. 5-只保留数字和运算符号+-*/^. 6-只保留字母和数字. 7-去掉数字. 8-去除英文大小写字符. 9-去除中文. 10-这里指去除所有空格符)。 HZtoPY 将存储格的内容中的中文汉字转换为拼音。第一个参数为单元格引用,第二个参数为是否只对汉字转换(1或0),第三个参数为间隔符号。后面两个参数可以省略。 NumInt 将存储格的数字金额转换为按整数四舍五入的整数金额。第一个参数即单元格引用,第二个参数为人民币面额(取值为5或10)。例如:NumInt(9825.65,5)=9825, NumInt(9825.65,10)=9830。面值参数越大差异越大。 NumIntDown 将存储格的数字金额转换为向下按整数四舍五入的整数金额。第一个参数即单元格引用,第二个参数为人民币面额(取值为5或10)。例: NumIntDown(9825.65,5)=9820, NumIntDown(9825.65,10)=9820。面值参数越大差异越大。 NumIntUp 将存储格的数字金额转换为向上按整数四舍五入的整数金额。第一个参数即单元格引用,第二个参数为人民币面额(取值为5或10)。例如:NumIntUp(9825.65,5)=9830, NumIntUp(9825.65,10)=9830。面值参数越大差异越大。 ReplaceIn 字符替换含数。第一个参数为字符串表达式或单元格引用,第二个参数为要查找的字符串,第三个参数为新替换的字符串,第四个参数为从找到的第N个字符开始替换。 RightFind 从右向左查找字符串的函数。例如:RightFind("BCADEA","A")=6 存 储 格 操 作 ClearBlank 消除空值函数。可以选择多多列,按先后列之方式返回值.两个参数,第一个参数为存储格区域引用,第二个参数为需要取数的序号(1--N)。 ColorCount 取存储格范围内某颜色值的存储格个数。第一个参数为储格范围引用,第二个参数为某颜色Index值或某单元格引用。 ColorSum 按背景颜色对区域值求和。第一参数为求和区域,第二参数为背景颜色参照值。 FormulaView 显示公式函数。提取单元格中的公式,第一个参数单元格引用,第二个参数可省略。 GradeAverage 评委评分函数。计算引用存储格区域中去除最大值与最小值之后再求平均数。 GetFolderPathName 用于创建带链接的文件目录,有二个参数,第一参数为指定路径的字符串,第二参数指定取值编号(数字序号1--N)。 GetComment 提取存储格批注中的文字。只有一个参数,即单元格引用。 CommonItem 返回两个存储格区域的共有项目。前两个参数为区域,第三参数为取数序号1--N。 VarianceItem 返回第一区域中有而第二区域没有的项目。前两个参数是区域,第三参数为序号。 SplitGetValue 按分割符取数。第一参数为单元格引用,第二参数表示取第N个字符串,第三个参数表示分割符号,可任意字符。 UnionString 将区域字符进合并。第一参数为分割符,第二参数为引用区域。可以用""表示不使用分割符。第三参数开始为引用区域,可以有1到254个区域(Excel2003中是1到29个)。也还可以直接用文本做参数。 普通函数 BookName 取工作薄名称目录。一个参数,输入工作薄序号即返回相应工作薄名称。 SheetName 取工作表名称目录。一个参数,输入工作表序号即返回相应工作表名称。 GoldPoint 数学中黄金分割点的精确取值。 PI 数学中PI(π)的精确取值。PI=3.1415926535897932384626433832795. 系统函数 CloseExcel 不保存当前文档而直接退出EXCEL。 ComputerChangeName 更改计算机名称。一个参数即任意的名称字符串。 ComputerLock 电脑进入登出锁定状态。一个可选参数可以省略。 ComputerSleep 电脑进入待机休眠状态。一个可选参数可以省略。 USB USB盘的禁用与恢复启用。一个字符串参数即Enabled为启用,Disabled为禁用。 对于无法安装的朋友请注意以下4点 : 一:必须是完整版OFFICE,不能是绿色版、精简版,它们不支持COM加载宏. 二:必须关闭Excel状态下安装或者删除工具,安装后重启Excel即可. 三:如果是VISTA或WIN 7,必须以管理员用户安装,且从控制面板中关掉用户帐户控制(UAC)功能. 四:如果您装了其它的EXCEL工具,请先关掉它,它们有可能删除本工具的菜单. 安装方法:(也可参考安装说明.TXT文档) 安装说明与使用规则: 1.1.绿色版本安装:管理员用户运Setup.exe进安装程序! 运UnSetup.exe进反安装程序! 1.2.绿色版本安装:非管理员用户可运Register.bat进安装程序! 运UnRegister.bat进反安装程序! 2.1.若安装并使用后因误操作报错时(例如EXCEL打开后未能加载工具菜单),可以卸载后重新安装到另外不同的目录中即可恢复正常.(因微软COM的保护措施而致)! 2.2.建议每天只打开EXCEL主程序一次为宜,保持打开状态不要关闭.(文档则可任意多次打开). 3.1.由于免费标签插件ExcelTab.dll与系统的兼容性问题,安装后在使用过程中若出现屏幕微小抖动或影响正常使用时,请将安装目录Librarys中的ExcelTab.dll 文件改名或删除即可! (不过出现的几率为1%左右). 或者请下载后24小时之内将其删除即可,而不会影响本工具箱的功能! 功能使用帮助动画: http://xutu.net/viewfile/2451/N4Jx3Thi/ EXCEL集成工具箱V7.0使用帮助.rar 需知更多请访问官方论坛: Http://exceltools.5d6d.com  留言或Email给作者。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xkng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值