精华内容
下载资源
问答
  • excel 工具

    2012-01-22 15:04:34
    【修复Excel】:当您的Excel某些功能无法使用时,或者无缘无故多出很多菜单、工具栏时,本工具可以瞬间恢复Excel到默认状态 【破解VBA密码】:将VBA编写的且有密码的程序进行破解,瞬间完成 【生成2003样式菜单】:...
  • EXCEL一键A1工具

    2018-11-14 16:21:20
    双击之后启用宏,添加之后EXCEL工具栏上会出现加载项选项,一键把所有sheet页光标放到A1,win7也可以放到C:\Users\Admin\AppData\Roaming\Microsoft\AddIns目录下
  • Excel集成工具

    千次阅读 2013-10-25 22:22:25
    Excel集成工具箱是著名微软办公软件EXCEL(Microsoft Office for EXCEL)增强型插件。包括190个菜单功能和100个左右自定义函数,集290个工具于一身,但体积小于9MB。当安装集成工具箱后,如果您使用Excel 2003,则将...
    Excel集成工具箱是著名微软办公软件EXCEL(Microsoft Office for EXCEL)增强型插件。包括190个菜单功能和100个左右自定义函数,集290个工具于一身,但体积小于9MB。当安装集成工具箱后,如果您使用Excel 2003,则将产生【工具箱】菜单,包括190多个子菜单;如果您使用E
    Excel集成工具箱是著名微软办公软件EXCEL(Microsoft Office for EXCEL)增强型插件。包括190个菜单功能和100个左右自定义函数,集290个工具于一身,但体积小于9MB。当安装集成工具箱后,如果您使用Excel 2003,则将产生【工具箱】菜单,包括190多个子菜单;如果您使用Excel 2007或者2010,将产生【集成】与【工具箱】功能区

    本工具箱190个菜单工具主要功能简介如下:    
        
    分类 功能名称 功能介绍    
    综合工具箱 
    【简体转繁体】 将选中区域存储格的简体字批量转换成繁体。    
    【繁体转简体】 将选中区域存储格的繁体字批量转换成简体。    
    【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的加总求和,以及显示选区包含的数字、字符、汉字的个数等信息。    
    【GB2转BIG5】 将选中区域存储格的简体字(GB2)批量转换成繁体操作系统的繁体(BIG5)。    
    【BIG5转GB2】 将选中区域存储格的繁体字(BIG5)批量转换成简体操作系统的简体(GB2)。    
    【文本转数字】 将选中区域存储格的文本格式的数字批量转换成数字格式的数值。     
    【数字转文本】 将选中区域存储格的数值格式数字批量转换成文本格式的字符。 
    【小字转大写】 将选中区域存储格的小写金额批量转换成中文大写金额。     
    【大写转小写】 将选中区域存储格的中文大写金额批量转换成小写金额。     
    【倒置选区值】 将选中区域存储格的内容进行完全倒置,倒置的倒置即还原为原内容,支持多行多列倒置。     
    【转置选区值】 将选中存储格区域内容自动识别行转置为列与列转置为行,支持多行多列相互转置并且能保留转置前的多样格式。     
    【数字符分离】 将存储格的内容按需求进行字符分离与表达式计算。(1-只保留数字. 2-只保留字母. 3-只保留中文. 4-只保留数字和小数点. 5-保留数字和运算符号并运算. 6-只保留字母和数字. 7-去掉数字. 8-去除英文大小写字符. 9-去除中文. 10-去除所有空格符)。    
    【按背景色汇总】 将当前选区存储格的内容按其单元格背景颜色进行快速汇总成报表格式输出。
    【取选区唯一值】 将当前选区存储格的内容可按【先列后行】或者【先行后列】方式输出唯一值到指定新的单元格中。
    完    美    背    景    着    色 
    【选区背景】 默认启动智能着色方式,此功能会清除一部分背景颜色,但对工作表中的条件格式会作完全保留,丝毫没有影响。最大的特点是支持屏幕行列捲轴的操作而不影响显示。    
    【选区背景选择】 进行着色功能切换,支持行着色、列着色、行与列同时着色、智能着色、选区着色、反向着色共6种方式供选择,可以自定义56种基本及颜色板任意着色颜色。    
    【条件背景】 默认启动智能着色方式,此功能不会清除背景颜色,但会对工作表中的条件格式作自动清除。最大的特点是支持屏幕行列捲轴的操作而不影响显示。    
    【条件背景选择】 进行着色功能切换,支持行着色、列着色、行与列同时着色、智能着色、选区着色、反向着色共6种方式供选择,可以自定义56种基本及颜色板任意着色颜色。    
    【高级背景】 将选择的行进行颜色标示,以突出当前行,有利于数据查看。可以随心所欲地定义颜色,还可以自由调整颜色的深浅。本工具相对于同类工具有不破坏背景色、条件格式、复制粘贴和撤消功能之优点。    
    【高级背景选择】 背景着色的高级功能,支持行着色、列着色、行与列同时着色共3种方式供选择。    
    快捷取数 
    【快捷取数列】 随存储格即时移动的快捷数据清单,可取任意区域的数据为唯一值清单,提高数据录入效率。最重要的是清单的最后6项为子程序功能,点击则可以完成增加清单显示宽度,选中或反选所有清单、写清单到任意存储格、重新加载数据等操作。也可以重新加载另外一区域或某几列的数据,也可以重新设定功能的生效存储格范围。    
    【快捷取日期】 随存储格即时移动的快捷日期数据清单,且有已录入日期的记忆功能。所有快捷取数工具都具有使用30秒钟则自动隐藏功能,用户可以决定是否取消其自动隐藏清单。    
    【快捷综合取数】 功能较<快捷取数列>功能更强大,支持同时取6个不同存储格区域(或列)为6个唯一值清单,并在指定的6个不同的生效范围自适应地显示对应的清单。清单的最后6项也为子程序功能,能完成相关操作。且支持重新加载数据及重设定生效存储格范围。    
    财    务    工    具 
    【自动填充】 不同于EXCEL的CTRL+D功能,能对选中的某列数据不同存储格区域的空白处,取相邻的上一不为空的存储格内容同时作数据源的自动填充。1分钟内能处理手工需几小时才能完成的几万行ERP或KingDee原始数据。极力推荐的工具之一。    
    【取唯一值】 能瞬间取任意存储格区域的内容为不含重复值的唯一值清单,加载到工具中并提供随时随地调用,具有重复加载与读写的特点。    
    【添加注解】 可视化地窗体添加与修改注解功能。提供50种美观大方的批注样式供选择,支持图片背景批注与批量写批注。最大的优点是将指定的任意区域按每个存储格内容为一行加入到当前批注中,允许批注内容中是否显示行号。    
    【连接字符串】 可视化地窗体连接字符串功能。能将最多三个任意区域存储格(或列)的内容按自定的分隔符号连接成一个字符串写入指定的存储格或新工作表中。可以生成含重复值与不含重复值并可选是否排序的连接字符串。连接上万个字符只需短短1分钟即完成。    
    【隔行或列插入】 在当前工作表中允许从M行到N行,隔X行插入Y行,并允许是否需复制行标题一至多行。或者在当前工作表中从M列到N列,隔X列插入Y列,并允许是否需复制列标题一至多列。    
    【制作工资条】 瞬间将工资明细表生成工资条,方便打印并裁剪。可以自己定义工资条标题的行数以及相隔行数、插入行数等。并能动态地显示运行过程,支持程序运行后中途暂停。    
    【恢复工资条】 能将已生成工资条的工资明细表,快速地还原为初始状态,支持多种参数设定。    
    【生成数据列】 生成发票号码序列的得力助手,可以生成任意的奇偶数列,差值或倍值或者递增、递减的任意有理数数据序列,支持先行后列与先列后行两种方式,支持瞬时恢复清除。    
    【取RMB张数】 根据员工的工资计算需要多少张100元、50元......1元的钞票,可以批量累计计算。发现金工资的财务工作者的必备工具之一。    
    【数字转英文】 将选中区域(默认)或已使用区域存储格的金额数字转换成英文格式显示的表达字符串,为三资企业制作客户外汇付款通知书的理想工具。    
    【文本转EXCEL】 将文本文件按指定的分隔符号分隔一次性导入到EXCEL文档中。提供两种导入方式。    
    【EXCEL转文本】 将当前工作表中存储格的内容按指定分隔符号导出为TEXT文本,此为银行代发工资数据与邮局或银行传递数据的便利工具之一。并提供两种方式的转换。    
    【分页小计累计】 将当前工作表中的薪资等内容按指定每页行数对每页最后行加上小计与累计。并提供仅小计与小计加累计两种方式供选择。 
    【生成斜线表头】 Excel没有Word那样的斜线表头工具,本工具可以弥补此不足。包括单线、双线可选,共三种样式。
    【生成底端标题】 将最后几行做为底端标题进行打印,弥补Excel只有顶端标题之不足,底端标题处支持公司盖章图片或者个人签名图片。
    【重复姓名值】 提取任意选定区域中存在的姓名或数据按照重复出现的次数输出。也可以进行标示或者清除重复值,还可以标示或提取选区唯一值。
    【相同项与不同项】 提取两列数据或者两选定区域的共同项和不同项,也可以对两列数据或者两选定区域的不同项或者相同项进行标示或者清除,还可以清除两者重复值。
    成本核算 
    【取唯一值】 还在使用<分类汇总>或<小计>功能对数据进行唯一值的繁锁操作吗? 本工具可快捷方便地取任意选中区域的存储格内容为唯一值清单,快捷且高效。    
    【取产品型号】 功能较在字符串中取数字强大多倍。能批量取某列存储格按指定长度的数字并允许特定数字串的获取,例如M76000,RC76000等。而小于指定长度的数字串则不予获取。    
    【快速选定数据】 可瞬间选中与用户指定内容相同的当前工作表中所有存储格,方便选定、清除内容或其他操作,支持选中字体彩色是否着色。    
    【取型号使用范围】 取MATCH的两列数据(Relating Area)中对应MODEL的使用范围(Where Used)。    
    常    用    工    具 
    【繁简转换】 可视化的繁简体GB与BGK码以及GB2与BIG5码相互转换,可以复制文本到当前窗体中文本进行转换,也可以实现单个文件或批量文件的转换。在窗体中双击文本字符串尾即可实现自动选定文本并自动复制功能。本工具较同类转换工具准确率达100%。    
    【背景颜色】 提供可视化的可选择着色方式的背景着色功能,默认启用智能着色。    
    【文件批量改名】 功能完善的文件或图片批量改名工具。细分为<用数字顺序或倒序><用EXCEL存储格内容><增加字符串><清除字符串><替换字符串>多方式改名,优点明显。例:替换字符串就支持起始长度、替换个数、GB2与BIG5码相互转换等多选项操作,也支持文件扩展名的修改。现为市场上功能最强大的一款文件及图片批量改名工具。    
    【工作表保护】 对当前工作薄中的各工作表批量一次性用指定密码进行锁定与解锁操作。    
    【工作表隐藏】 对当前工作薄中的各工作表批量一次性进行隐藏与取消隐藏操作。    
    【新建工作表】 批量新建或者复制工作表,依指定存储格内容可以瞬间建立/复制1到255个。还可以在新建或复制时全自动命名。分为自动新增方式与依指定存储格内容两种方式。    
    【插入批注背景】 可以选定任意一幅图片为批注背景来插入一个带图片背景的批注。可视化窗体操作,可随时更换批注样式,也支持批量多存储格样式修改。    
    【插入行数】 对工作表隔行插入行并可以复制标题行,其中对相隔行数、插入行数等可以自定义。    
    【注解样式】 可以插入多达50种样式的注解,支持随时切换当前注解样式为指定的样式。    
    【工作表拆分】 将当前工作表的某列数据按指定条件拆分成多个工作表,可以用任意列的数据以及选定的数据做为拆分条件。    
    【行列奇偶选择】 可视化对当前工作表的行与列进行快速的奇偶行或奇偶列快速选定操作。    
    【查找与替换】 增强型EXCEL内置查找与替换功能。可以按设置搜索任何字符串(包括*或?符以及公式中包含的某字符),也可以将搜索结果写入到一新的工作表中以备查。    
    【EXCEL比较工具】 打开并比较任意两个EXCEL文档工作表内容之间的差异,可对比出哪些内容作了修改。 
    【资料分栏打印】 Word有分栏功能,本工具使Excel也具有同类功能。当数据列数太少浪费打印纸张时,可以用本工具分成多栏再打印。
    【工作薄合并】 将指定文件夹中的所有Excel文档汇总到一个工作薄中,再将该工作薄中所有工作表内容汇总到一个工作表中,以进行汇总。
    【工具箱选项】 集成工具箱的基本选项设置。基本分为<显示设置区><隐藏功能区><自动备份区><工作表设置区><功能窗体显示区>。其中功能窗体显示区(NoTaskbar)功能可设置本工具启用的窗体图标是否在状态栏显示,并允许切换功能。    
    扩    展    工    具 
    【屏幕截图】 可以截取屏幕任意一区域并复制或另存为图片,可随意更改大小,操作灵活性特强。    
    【屏幕取色】 经典的屏幕取色工具,可取任意一处屏幕颜色到指定的存储格中,可显示为RGB颜色值或十六进制的颜色值,为VBA开发人员的辅助工具之一。    
    【万年日历】 可以查询所有节、假日信息和公农双历,以及计算两时点间的相隔天数等。    
    【LED时钟与样式】 超漂亮的LED时钟,有默认时钟、蓝色时钟、经典时钟三种样式供选择。    
    【系统常用工具】 系统常用工具的快捷调用,例如:计算器、记事本、WORD、画图板。    
    【隐藏选项卡】 可以隐藏Excel2007及2010功能区的各选项卡(如:开始、插入、开发工具等)。    
    【启用多标签】 新增ExcelTsbs多标签插件,类似IE游览器的多标签,方便在不同工作薄中切换与使用。可以通过鼠标左键、右键或中键双击标签位置来关闭工作簿和双击空白区域来新建工作簿等操作。 支持Ctrl+Tab键在多个TAB标签中切换和鼠标左键拖动TAB标签移动位置。通过标签和空白区域的右键菜单用户可以进行不同的功能操作。
    【禁用多标签】 是否显示TAB标签栏的开关--启用与禁用多标签菜单。禁用多标签可以随时禁用已启用的TAB多标签功能。还可以在【工具箱选项】中来设置是否不自动加载ExcelTabs多标签插件。
    【截图小精灵】 功能齐全的屏幕截图工具,可以在截图时添加不同颜色的文字、方框、圆圈、箭头符号标记,支持撤销与还原操作。可存储为多种格式图片也可复制为图片然后粘贴到Excel中即时使用。
    图    片    工    具 
    【选择本表图片】 将工作表中的图表导出为图片保存起来。    
    【批量导入图片到右列】 批量将图片导入到工作表中对应图片名字的右边。    
    【将选区转换成图片】 将工作表中的当前选中区域另存为图片。    
    【一键导出图形】 将工作表中的图片导出为图片文件。    
    【导入图片到工作表】 将磁盘中的图片导入到工作表中。    
    【删除选中区域图形】 将工作表中当前选中区域的所有图片与图形删除。    
    【删除所有导入图形】 将工作表中存在的所有图片与图形瞬间删除。    
    【批量导入图片】 将指定文件夹或包含子文件夹中所有图片瞬间(也可以按对应名称)按指定图片大小导入EXCEL中。允许一次性多图片格式(*.JPG/*.GIF/*.BMP/*.PNG),且支持模糊与非模糊方式导入图片,还可以在导入的图片上显示其文件名称以易于管理。    
    【批量导出图片】 将EXCEL中指定某列中的图片按显示图片大小导出到指定的文件夹中。    
    【选中所有图片】 选中当前工作表中指定图片类型的所有图形或图片(1--18种类型; 1.所有图片(有框) 2.所有类型图形 3.所有图片(无框) 4.控件对象 5.窗体控件 6.批注 7.线条 8.文本框 9.图 10.自选图形 11.图表 12.嵌入OLE对象 13.任意多边形 14.文本效果 15.画布 16.媒体 17.表 18.组合)。    
    批    注    工    具 
    【插入样式批注】 提供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病毒的破坏。    
    函数工具 
    【插入函数】 以对话窗体方式插入<TOOL.FUNCTION>类别中大约一百个左右的自订增益函数。    
    【函数帮助】 提供最常用的绝大多数自订增益函数的详细说明信息。    
    【函数实例】 以实例文档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网页中的密码框中的密码。 
    【MD5较验工具】 MD5校验工具是一款免费、快速、小巧易用的MD5值验证、计算软件,它可以验证文件的MD5值,确保它们没有被更改过。支持MD5查询、SHA1查询、CRC32查询校验,并且支持显示文件版本、时间参数,支持文件与文件夹鼠标拖放功能。该工具可对文件进行批量校验,免去多个文件校验时的麻烦。
    【程序调试工具】 用作程序自身的DEBUG调试与程序崩溃的自动修复等。    
    动    画    工    具 
    【鼠标跟随动画】 非常灵活的鼠标跟随动画,有四种样式自动切换且支持各种显示参数值设定,可以修改参数固定为其中的一种动画方式。    
    【显示茸茸小兔】 可爱的茸茸小兔显示在屏幕右下角,仿瑞星杀毒软件的卡卡动画。    
    【启用特效动画】 随鼠标选中不同存储格变化而出现的6个绿色自转动环的特效动画,第一次有了“这是在使用EXCEL中的功能吗”的惊奇。有随鼠标移动(选YES)与不随鼠标移动两种方式,可以通过<禁用特效动画>禁用此动画。动画工具中的经典之一。    
    【多个休闲动画】 具有休闲与娱乐于一体的多个动画:喜悦黄鹂、勤劳蜜蜂、经梅迎春、青青竹子、时针指南、葡萄熟了、果实累累、花好月季等。为EXCEL增添一丝喜色。    
    【关闭所有动画】 一键迅速关闭所有已经打开的休闲动画。    
    休    闲    工    具 
    【媒体播放器】 简洁媒体播放器,可打开MP3、MP4、MPG、DVD等几乎所有格式的多媒体文体。    
    【播放FLASH】 支持打开所有SWF格式的FLASH文件进行播放,可以暂停或按帧播放。    
    【屏幕放大镜】 可以缩放屏幕任意区域,支持0.5倍、1倍、2倍、3倍、6倍放大效果。    
    【屏幕画笔】 可以手写并在当前屏幕背景图上圈、点、划、作波浪标记等均可,并可将结果保存为图片文件或插入到Excel中,可自定画笔粗细与颜色选择,支持随时清除所有标记。    
    【俄罗斯方块】 非常经典的俄罗斯方块积分小游戏,支持鼠标操作与键盘方向键(或WSADZ键)两种操作方式,空格与回车键为暂停切换键。    
    【在线音乐】 非常流行的网络在线音乐播放器,自动加载最近音乐排行榜,也可按名字或歌星搜索到最热的歌曲并加到播放清单中。    
    【提取FLASH】 从打开的一个OFFICE文档中提取文档中嵌入的FLASH并保存为一个*.SWF文件。 
    开    发    辅    助 
    【获取系统菜单】 获取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    
    StringKeepOrDelete 将存储格的内容按需求进行字符保留或删除。例如:StringKeepOrDelete(\"美国China\",\"Chinese\",TRUE)=China ,即为删除中文汉字。 
    存    储    格    操    作 
    CheckId 身份证信息查询及验证函数。一个参数即为单元格引用或身份证号码字符串。返回信息为:地区信息+出生年月日+性别+出生序号+是否验证成功。可取身份证前2位或4位或6位或10位或14位(也可后面以0数字补充)即显示地区信息;完整应取18位身份证字串数据。
    ClearBlank 消除空值函数。可以选择多行多列,按先行后列之方式返回值.两个参数,第一个参数为存储格区域引用,第二个参数为需要取数的序号(1--N)。    
    ColorCount 取存储格范围内某颜色值的存储格个数。第一个参数为储格范围引用,第二个参数为某颜色Index值或某单元格引用。    
    ColorSum 按背景颜色对区域值求和。第一参数为求和区域,第二参数为背景颜色参照值。    
    FormulaView 显示公式函数。提取单元格中的公式,第一个参数单元格引用,第二个参数可省略。 
    GetOnlyValue 提取指定任意存储格区域中的唯一值. 优点是存储格区域中的值无需排序.第一个参数单元格引用,第二个参数为序号从1至N。例如: B1=GetOnlyValue(A:A,ROW())
    OutputSameTimes 提取指定任意存储格区域中的重复出现的值并依指定重复次数.第一个参数单元格引用,第二个参数为指定大于或等于重复出现的次数. 第三个参数为序号从1至N. 第四个参数为BOOL型,默认为FALSE,当为TURE时则第二个参数为指定等于重复出现的次数。例如: E1=OutputSameTimes(A1:C100,2,ROW())
    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文档)    

    【更新日志】
    EXCEL集成工具箱 2013    V18.5
    18.5.1 选区简体转繁体与繁体转简体功能恢复为永久免费使用.
    18.5.2 新增工作表链接汇总功能,特别适用年度汇总的表格应用.
    18.5.3 新增隔行或列求和功能,适用于需要固定隔多少行或固定隔多少列进行加总的求和应用.
    18.5.4 新增选区真正四舍五入功能,具有保留公式模式、完全数值模式、保留原值模式共三种方式供选择.
    18.5.5 新增工作表批量冻结与解冻功能,可按冻结行列范围或按指定单元格地址方式批量对工作表进行操作.
    18.5.6 增强工作薄(表)合并功能,允许是否清除工作表中的公式或链接数据.
    18.5.7 新增全能语音朗读器功能,支持女声或男声发音,支持女声纯英文或者中英文混合内容朗读.
    18.5.8 为提升产品性能至极限,部分功能或函数改为C++模块替换,如GB2BIG5模块、表达式计算精灵等.
    18.5.9 完善用户反馈的一些功能细节改进,精雕细琢让功能以完美方式显现.
    18.5.10 解决WIN8系统中EXCEL以管理员身份运行程序时打开文档可能出现"向程序发送命令时出现错误"的用户使用问题.

    展开全文
  • 使用本工具前应该首先设置好IE浏览器,设置方法:Excel操作设置--ActiveX控件本工具地址:http://www.okandok.com.cn/index.aspx?n=ExcelTools&id=3使用说明地址:Excel工具集-自动生成Excel工作表目录并可加链接...

    使用本工具前应该首先设置好IE浏览器,设置方法:

    Excel操作设置--ActiveX控件

    本工具地址:http://www.okandok.com.cn/index.aspx?n=ExcelTools&id=3

    使用说明地址:Excel工具集-自动生成Excel工作表目录并可加链接

    javascript在线版Excel工具集:http://www.okandok.com.cn/index.aspx?n=ExcelTools

    用途:当您的Excel系统菜单出现问题时,不能正常显示时,利用本工具进行修复。

    相关图片:

     

    展开全文
  • 但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。...

    一、EasyExcel概述

     

    Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POI sax依然需要100M左右内存降低到几M,并且再大的excel不会出现内存溢出,03版依赖POI的sax模式。在上层做了模型转换的封装,让使用者更加简单方便。

    github地址:https://github.com/alibaba/easyexcel

    使用文档:https://alibaba-easyexcel.github.io/

    官方给出的数据,64M内存1分钟内读取75M(46W行25列)的Excel,当然还有急速模式能更快,但是内存占用会在100M多一点:

    二、EasyExcel常用功能

    读Excel

    写Excel

    填充Excel

    三、EasyExcel使用方法和调优

    官方除了文档外,还提供了强大的demo代码。代码就不贴了,我只给出maven坐标:

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.1.4</version>
    </dependency>
    

    默认大文件处理

    默认大文件处理会自动判断,共享字符串5M以下会使用内存存储,大概占用15-50M的内存,超过5M则使用文件存储,然后文件存储也要设置多内存M用来存放临时的共享字符串,默认20M。除了共享字符串占用内存外,其他占用较少,所以可以预估10M,所以默认大概30M就能读取一个超级大的文件。

    根据实际需求配置内存

    四、EasyExcel的核心原理

    1、文件解压文件读取通过文件形式

    屏幕快照 2018-01-22 上午8.52.08.png

    2、避免将全部全部数据一次加载到内存

    采用sax模式一行一行解析,并将一行的解析结果以观察者的模式通知处理。 基础模板1 (2).png

    3、抛弃不重要的数据

    Excel解析时候会包含样式,字体,宽度等数据,但这些数据是我们不关心的,如果将这部分数据抛弃可以大大降低内存使用。Excel中数据中Style占了相当大的空间。

    五、该项目的优缺点

    该项目不是阿里重点项目,目前只有三个人维护,但项目很活跃,获得的star数也很高,可以作为生产来使用。但要注意,目前还有以下功能尚未实现:

    • 单个文件的并发写入、读取
    • 读取图片
    • csv读取(这个后续可能会考虑)
    展开全文
  • ExcelExportUtiler excel工具

    千次阅读 2017-11-10 17:13:45
    } } /** * 提示用户下载excel * * @function 对ie浏览器和firefox进行了兼容,不会出现乱码问题浏 * @author junqiang.qiu * @date 2016年12月8日 */ public void downloadExcel(HttpServletRequest request, ...
    @Slf4j
    public class ExcelExportUtil {
    
        /*工作薄*/
        private HSSFWorkbook workbook;
    
        /*默认格子宽度*/
        private int defaultColumnWidth = 20;
    
        /*sheet页的名称*/
        private String sheetName;
    
        /*默认标题字体*/
        private HSSFFont defaultTitleFont;
    
        /*默认内容字体*/
        private HSSFFont defaultContentFont;
    
        /*默认标题风格*/
        private HSSFCellStyle defaultTitleStyle;
    
        /*默认内容风格*/
        private HSSFCellStyle defaultContentStyle;
    
        /*最后一个sheet页索引*/
        private int lastSheetIndex = 0;
    
        public HSSFWorkbook getWorkbook() {
            return workbook;
        }
    
        public int getDefaultColumnWidth() {
            return defaultColumnWidth;
        }
    
        public String getSheetName() {
            return sheetName;
        }
    
        public HSSFFont getDefaultTitleFont() {
            return defaultTitleFont;
        }
    
        public HSSFFont getDefaultContentFont() {
            return defaultContentFont;
        }
    
        public HSSFCellStyle getDefaultTitleStyle() {
            return defaultTitleStyle;
        }
    
        public HSSFCellStyle getDefaultContentStyle() {
            return defaultContentStyle;
        }
    
    
        public ExcelExportUtil() {
            this(null, 0, null, null, null, null, null);
        }
    
        public ExcelExportUtil(int defaultColumnWidth) {
            this(defaultColumnWidth, null);
        }
    
        public ExcelExportUtil(String sheetName) {
            this(0, sheetName);
        }
    
        public ExcelExportUtil(int defaultColumnWidth, String sheetName) {
            this(null, defaultColumnWidth, sheetName);
        }
    
        public ExcelExportUtil(HSSFWorkbook workbook, int defaultColumnWidth, String sheetName) {
            this(workbook, defaultColumnWidth, sheetName, null, null, null, null);
        }
    
        public ExcelExportUtil(HSSFWorkbook workbook, int defaultColumnWidth, String sheetName, HSSFFont defaultTitleFont, HSSFFont defaultContentFont, HSSFCellStyle defaultTitleStyle, HSSFCellStyle defaultContentStyle) {
    
            if (workbook == null) {
                this.workbook = new HSSFWorkbook();
            } else {
                this.workbook = workbook;
            }
    
            if (defaultColumnWidth == 0) {
                this.defaultColumnWidth = 20;
            } else {
                this.defaultColumnWidth = defaultColumnWidth;
            }
    
            if (sheetName == null || "".equals(sheetName.trim())) {
                this.sheetName = "sheet";
            } else {
                this.sheetName = sheetName;
            }
    
            if (defaultTitleFont == null) {
                this.defaultTitleFont = getDefaultTitleFont(this.workbook);
            } else {
                this.defaultTitleFont = defaultTitleFont;
            }
    
            if (defaultContentFont == null) {
                this.defaultContentFont = getDefaultContentFont(this.workbook);
            } else {
                this.defaultContentFont = defaultContentFont;
            }
    
            if (defaultTitleStyle == null) {
                this.defaultTitleStyle = getDefaultTitleStyle(this.workbook);
            } else {
                this.defaultTitleStyle = defaultTitleStyle;
            }
    
            if (defaultContentStyle == null) {
                this.defaultContentStyle = getDefaultContentStyle(this.workbook);
            } else {
                this.defaultContentStyle = defaultContentStyle;
            }
        }
    
        /*获取默认标题字体*/
        public static HSSFFont getDefaultTitleFont(HSSFWorkbook workbook) {
            HSSFFont titleFont = workbook.createFont();
            titleFont.setColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());                  //字体颜色
            titleFont.setFontHeightInPoints((short) 9);                 //字号
            titleFont.setBold(true);          //粗体
            titleFont.setFontName("微软雅黑");                          //微软雅黑
            return titleFont;
        }
    
        /*获取默认内容字体*/
        public static HSSFFont getDefaultContentFont(HSSFWorkbook workbook) {
            HSSFFont contentFont = workbook.createFont();                 //定义内容字体样式
            contentFont.setColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());                  //字体颜色
            contentFont.setFontHeightInPoints((short) 9);                 //字号
            contentFont.setBold(true);        //普通粗细
            contentFont.setFontName("微软雅黑");                          //微软雅黑
            return contentFont;
        }
    
        /*获取默认标题样式*/
        public static HSSFCellStyle getDefaultTitleStyle(HSSFWorkbook workbook) {
            HSSFCellStyle titleStyle = workbook.createCellStyle();
            titleStyle.setBorderBottom(BorderStyle.THIN);                 //设置底部边线
            titleStyle.setBorderLeft(BorderStyle.THIN);                   //设置左部边线
            titleStyle.setBorderRight(BorderStyle.THIN);                  //设置右部边线
            titleStyle.setBorderTop(BorderStyle.THIN);                    //设置顶部边线
            titleStyle.setAlignment(HorizontalAlignment.CENTER);                   //表头内容水平居中
            titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);        //表头内容垂直居中
            titleStyle.setFont(getDefaultTitleFont(workbook));                     //设置该字体样式
            titleStyle.setWrapText(true);
            return titleStyle;
        }
    
        /*获取默认内容样式*/
        public static HSSFCellStyle getDefaultContentStyle(HSSFWorkbook workbook) {
            HSSFCellStyle contentStyle = workbook.createCellStyle();
            contentStyle.setBorderBottom(BorderStyle.THIN);                 //设置底部边线
            contentStyle.setBorderLeft(BorderStyle.THIN);                   //设置左部边线
            contentStyle.setBorderRight(BorderStyle.THIN);                  //设置右部边线
            contentStyle.setBorderTop(BorderStyle.THIN);                    //设置顶部边线
            contentStyle.setAlignment(HorizontalAlignment.CENTER);                   //表头内容水平居中
            contentStyle.setVerticalAlignment(VerticalAlignment.CENTER);        //表头内容垂直居中
            contentStyle.setFont(getDefaultContentFont(workbook));                    //设置该字体样式
            contentStyle.setWrapText(true);
            return contentStyle;
        }
    
        /**
         * 提示用户下载excel
         *
         * @param response 响应对象
         * @param fileName excel文件名
         *                 create by sunlihuo @2020-12-12
         */
        public static void downloadExcel(HSSFWorkbook workbook, HttpServletResponse response, String fileName) {
            try (OutputStream outputStream = response.getOutputStream()){
                if (StringUtils.isNotBlank(fileName)) {
                    fileName = new String(fileName.getBytes("gb2312"), "iso8859-1");                      //给文件名重新编码
                } else {
                    fileName = "excel";
                }
                response.setContentType("text/html;charset=utf-8");                                  //设置响应编码
                response.setContentType("application/x-msdownload");                                 //设置为文件下载
                response.addHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls");   //设置响应头信息
                workbook.write(outputStream);                                                        //把工作薄写进流中
            } catch (IOException e) {
                log.error("提示用户下载excel错误", e);
            }
        }
    
        /**
         * 提示用户下载excel
         *
         * @param response 响应对象
         * @param fileName excel文件名
         *                 create by sunlihuo @2020-12-12
         */
        public void downloadExcel(HttpServletResponse response, String fileName) {
            //创建输出流
            try (OutputStream outputStream = response.getOutputStream()){
                if (StringUtils.isNotBlank(fileName)) {
                    fileName = new String(fileName.getBytes("gb2312"), "iso8859-1");                 //给文件名重新编码
                } else {
                    fileName = "excel";
                }
                response.setContentType("text/html;charset=utf-8");                                  //设置响应编码
                response.setContentType("application/x-msdownload");                                 //设置为文件下载
                response.addHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls");   //设置响应头信息
                workbook.write(outputStream);                                                        //把工作薄写进流中
            } catch (IOException e) {
                log.error("提示用户下载excel错误", e);
            }
        }
    
        /**
         * 提示用户下载excel
         *
         * @function 对ie浏览器和firefox进行了兼容,不会出现乱码问题浏
         * @author junqiang.qiu
         * @date 2016年12月8日
         */
        public void downloadExcel(HttpServletRequest request, HttpServletResponse response, String fileName) {
            String agent = request.getHeader("USER-AGENT").toLowerCase();
            String codedFileName;
            try (OutputStream outputStream = response.getOutputStream()){
                codedFileName = java.net.URLEncoder.encode(fileName, "UTF-8");                        //给文件名重新编码
                /*这里对火狐浏览器做了设置*/
                if (agent.contains("firefox")) {
                    response.setCharacterEncoding("utf-8");
                    response.setHeader("content-disposition", "attachment;filename=" + new String(fileName.getBytes(), "ISO8859-1") + ".xls");
                } else {
                    /*其他浏览器*/
                    response.setHeader("content-disposition", "attachment;filename=" + codedFileName + ".xls");
    
                }
                response.setContentType("text/html;charset=utf-8");                                  //设置响应编码
                response.setContentType("application/x-msdownload");                                 //设置为文件下载
                workbook.write(outputStream);                                                        //把工作薄写进流中
            } catch (Exception e) {
                log.error("提示用户下载excel错误", e);
            }
    
        }
    
        /**
         * @function 创建Excel,在服务器端或者是本地
         * @author junqiang.qiu
         * @date 2017年1月12日
         */
        public void createExcel(String path, String fileName) {
            /*这里使用File.separator是Java定义的一个枚举,这样就可以跨平台,对应Windows和linux是不一样的*/
            try {
                String param = null;
                param = path + File.separator + fileName + ".xls";
                FileOutputStream fos = new FileOutputStream(param);
                workbook.write(fos);
                fos.close();
            } catch (Exception e) {
                log.info("创建excel失败" + e);
            }
        }
    
        /**
         * 添加标题行
         *
         * @param titles    标题集合
         * @param rowHeight 行高
         */
        public void addTitlesRow(Collection<String> titles, int rowHeight) {
    
            try {
    
                if (titles != null && rowHeight > 0) {
    
                    int rowIndex = 0;
                    HSSFSheet sheet = workbook.getSheet(sheetName);
    
                    /*总是获取最后一页,第一次则创建sheet页*/
                    if (sheet == null) {
                        sheet = workbook.createSheet(sheetName);
                    } else {
                        sheet = workbook.getSheetAt(lastSheetIndex);
                        rowIndex = sheet.getLastRowNum() + 1;
                    }
    
                    //若当前sheet页超过最大条数65536,则再创建一个sheet页
                    if (rowIndex > 65535) {
                        lastSheetIndex++;
                        sheet = workbook.createSheet(sheetName + lastSheetIndex);
                        rowIndex = 0;
                    }
    
                    sheet.setDefaultColumnWidth(defaultColumnWidth);
    
                    /*创建标题行*/
                    HSSFRow row = sheet.createRow(rowIndex);
                    row.setHeightInPoints(rowHeight);
                    Iterator<String> iterator = titles.iterator();
                    int index = 0;
                    while (iterator.hasNext()) {
                        String title = iterator.next();
                        HSSFCell cell = row.createCell(index);                        //给该行创建单元格
                        cell.setCellValue(title);                                    //给单元格放入标题
                        cell.setCellStyle(defaultTitleStyle);
                        index++;
                    }
                }
            } catch (Exception e) {
                log.error("添加标题行发生错误==>", e);
            }
    
        }
    
        /**
         * 添加内容行
         *
         * @param titleKeyMap 标题和mapList中key的对应
         * @param mapList     内容集合
         * @param rowHeight   内容行行高
         */
        public void addContentRow(Map<String, String> titleKeyMap, List<Map<String, Object>> mapList, int rowHeight) {
    
            try {
    
                if (titleKeyMap != null && rowHeight > 0 && mapList != null) {
    
                    int rowIndex = 0;
    
                    HSSFSheet sheet = workbook.getSheet(sheetName);
    
                    /*总是获取最后一页,第一次则创建sheet页*/
                    if (sheet == null) {
                        sheet = workbook.createSheet(sheetName);
                        sheet.setDefaultColumnWidth(defaultColumnWidth);
                    } else {
                        sheet = workbook.getSheetAt(lastSheetIndex);
                        rowIndex = sheet.getLastRowNum() + 1;
                    }
    
                    /*取出标题*/
                    List<String> titles = new ArrayList<String>(titleKeyMap.keySet());
    
                    /*根据数据的条数来创建表格行*/
                    for (Map<String, Object> map : mapList) {
    
                        //若当前sheet页超过最大条数65536,则再创建一个sheet页
                        if (rowIndex > 65535) {
                            lastSheetIndex++;
                            sheet = workbook.createSheet(sheetName + lastSheetIndex);
                            sheet.setDefaultColumnWidth(defaultColumnWidth);
                            rowIndex = 0;
                        }
    
                        HSSFRow row = sheet.createRow(rowIndex++);
                        row.setHeightInPoints(rowHeight);
                        for (int k = 0; k < titleKeyMap.size(); k++) {
                            HSSFCell cell = row.createCell(k);
                            String key = titleKeyMap.get(titles.get(k));
                            String value = (map.get(key) != null) ? map.get(key).toString() : "";
                            cell.setCellValue(value);
                            cell.setCellStyle(defaultContentStyle);
                        }
                    }
                }
            } catch (Exception e) {
                log.error("添加内容行发生错误==>", e);
            }
    
        }
    
        /**
         * 新增横向的标题-值的行
         *
         * @param titleValueRow
         */
        public void addTitleValueRow(TitleValueRow titleValueRow) {
    
            try {
                int rowIndex = 0;
    
                HSSFSheet sheet = workbook.getSheet(sheetName);
    
                /*总是获取最后一页,第一次则创建sheet页*/
                if (sheet == null) {
                    sheet = workbook.createSheet(sheetName);
                } else {
                    sheet = workbook.getSheetAt(lastSheetIndex);
                    rowIndex = sheet.getLastRowNum() + 1;
                }
    
                //若当前sheet页超过最大条数65536,则再创建一个sheet页
                if (rowIndex > 65535) {
                    lastSheetIndex++;
                    sheet = workbook.createSheet(sheetName + lastSheetIndex);
                    rowIndex = 0;
                }
    
                sheet.setDefaultColumnWidth(defaultColumnWidth);
    
                /*创建该行*/
                HSSFRow row = sheet.createRow(rowIndex);
                row.setHeightInPoints(titleValueRow.getRowHeight());
    
                List<TitleValue> titleValueList = titleValueRow.getTitleValueList();
    
                for (int i = 0; i < titleValueRow.getCellsSize(); i++) {
                    row.createCell(i).setCellStyle(defaultContentStyle);
                }
    
                int curCellIndex = 0;
                for (TitleValue titleValue : titleValueList) {
                    /*给单元格赋值*/
                    HSSFCell cell = row.getCell(curCellIndex);
                    cell.setCellValue(titleValue.getTitle());
                    if (titleValue.getTitleCells() > 1) {
                        sheet.addMergedRegion(new CellRangeAddress(rowIndex, rowIndex, curCellIndex, (curCellIndex + titleValue.getTitleCells() - 1)));
                    }
                    curCellIndex += titleValue.getTitleCells();
                    cell.setCellStyle(defaultTitleStyle);
    
                    if (titleValue.getValueCells() >= 1) {
                        cell = row.getCell(curCellIndex);
                        cell.setCellValue(titleValue.getValue());
                    }
                    if (titleValue.getValueCells() > 1) {
                        sheet.addMergedRegion(new CellRangeAddress(rowIndex, rowIndex, curCellIndex, curCellIndex + titleValue.getValueCells() - 1));
                    }
                    curCellIndex += titleValue.getValueCells();
                }
            } catch (Exception e) {
                log.error("新增横向的标题-值的行==>", e);
            }
        }
    
        /**
         * 标题和值行的类
         */
        public static class TitleValueRow {
    
            /*标题和值的集合*/
            private List<TitleValue> titleValueList;
    
            /*该行所占用的总格子数*/
            private int cellsSize = 0;
    
            /*该行所占用的高度*/
            private float rowHeight = 20;
    
            public TitleValueRow() {
                this.titleValueList = new ArrayList<TitleValue>();
            }
    
            public TitleValueRow(List<TitleValue> titleValueList, int rowHeight) {
                if (titleValueList != null && titleValueList.size() > 0) {
                    this.titleValueList = titleValueList;
                    for (TitleValue titleValue : titleValueList) {
                        cellsSize += titleValue.getTitleCells() + titleValue.getValueCells();
                    }
                } else {
                    this.titleValueList = new ArrayList<TitleValue>();
                }
                if (rowHeight > 0) {
                    this.rowHeight = rowHeight;
                }
            }
    
            public void addTitleValue(TitleValue titleValue) {
                titleValueList.add(titleValue);
                cellsSize++;
            }
    
            public float getRowHeight() {
                return rowHeight;
            }
    
            public void setRowHeight(float rowHeight) {
                this.rowHeight = rowHeight;
            }
    
            public List<TitleValue> getTitleValueList() {
                return titleValueList;
            }
    
            public void setTitleValueList(List<TitleValue> titleValueList) {
                this.titleValueList = titleValueList;
            }
    
            public int getCellsSize() {
                return cellsSize;
            }
    
            public void setCellsSize(int cellsSize) {
                this.cellsSize = cellsSize;
            }
        }
    
        /**
         * 横向的标题和行:
         * 格式为 ==> xxxx标题 : 值
         */
        public static class TitleValue {
    
            /*标题*/
            private String title;
    
            /*值*/
            private String value;
    
            /*标题所占用的格子数*/
            private int titleCells = 1;
    
            /*内容所占用的格子数*/
            private int valueCells = 1;
    
            /*构造方法*/
            public TitleValue() {
    
            }
    
            public TitleValue(String title, String value) {
                this.title = title;
                this.value = value;
            }
    
            public TitleValue(String title, String value, int titleCells, int valueCells) {
                this.title = title;
                this.value = value;
                this.titleCells = titleCells;
                this.valueCells = valueCells;
    
            }
    
            public TitleValue(String title, String value, int titleCells) {
                this.title = title;
                this.value = value;
                this.titleCells = titleCells;
            }
    
    
            public String getTitle() {
                return title;
            }
    
            public void setTitle(String title) {
                this.title = title;
            }
    
            public String getValue() {
                return value;
            }
    
            public void setValue(String value) {
                this.value = value;
            }
    
            public int getTitleCells() {
                return titleCells;
            }
    
            public void setTitleCells(int titleCells) {
                this.titleCells = titleCells;
            }
    
            public int getValueCells() {
                return valueCells;
            }
    
            public void setValueCells(int valueCells) {
                this.valueCells = valueCells;
            }
        }
    
        /**
         * @param fileName 导出文件名
         * @param msg      错误信息
         * @function 导出一个具有错误信息的excel
         * @author sunlihuo
         * @date 2017年3月10日
         */
        public static void exportErrorMsg(HttpServletResponse response, String fileName, String msg) {
            ExcelExportUtil excelExportUtil = new ExcelExportUtil("错误信息");
            TitleValue titleValue = new TitleValue(msg, "", 10, 0);
            TitleValueRow row = new TitleValueRow(Arrays.asList(titleValue), 50);
            excelExportUtil.addTitleValueRow(row);
            excelExportUtil.downloadExcel(response, fileName);
        }
    
        /**
         * @param response http响应对象
         * @function 传入一个http响应对象, 模拟导出一个excel
         * @author sunlihuo
         * @date 2015年8月5日
         * update at 2017年4月5日 by sunlihuo
         */
        public static void testExcelPort(HttpServletResponse response) {
    
            //创建一个实例,可以根据需要传入不同的参数,默认sheetName为"sheet"
            ExcelExportUtil excelExportUtil = new ExcelExportUtil();
    
            Map<String, String> titleKeyMap = new LinkedHashMap<String, String>();
            titleKeyMap.put("用户名", "userName");
            titleKeyMap.put("密码", "password");
            titleKeyMap.put("性别", "sex");
            titleKeyMap.put("年龄", "age");
            titleKeyMap.put("爱好", "hobby");
            titleKeyMap.put("公司", "company");
    
            //模拟10万条数据(本工具类支持任意数量和任意excel版本的导出,超过65536条将会分页)
            List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
            for (int i = 0; i < 100000; i++) {
                Map<String, Object> map = new HashMap<String, Object>();
                map.put("userName", "小明" + i);
                map.put("age", i);
                map.put("company", "蜀国" + i);
                map.put("hobby", "做作业");
                map.put("password", "1232323" + i);
                map.put("sex", "男");
                mapList.add(map);
            }
    
            /*添加横向的行*/
            List<TitleValue> titleValues = new ArrayList<TitleValue>();
            titleValues.add(new TitleValue("测试excel工具类", "", 6, 0));
            TitleValueRow row = new TitleValueRow(titleValues, 50);
            excelExportUtil.addTitleValueRow(row);
    
            /*添加标题行*/
            excelExportUtil.addTitlesRow(titleKeyMap.keySet(), 30);
    
            /*添加内容行*/
            excelExportUtil.addContentRow(titleKeyMap, mapList, 20);
    
            /*添加横向的行*/
            List<TitleValue> titleValues1 = new ArrayList<TitleValue>();
            titleValues1.add(new TitleValue("末尾也可以添加", "哈哈哈哈", 3, 3));
            TitleValueRow row2 = new TitleValueRow(titleValues1, 50);
            excelExportUtil.addTitleValueRow(row2);
    
            /*下载*/
            excelExportUtil.downloadExcel(response, "用户信息表");
    
        }
    
        public static void ExcelPort(HttpServletResponse response, List<String> keys, List<String> titles, String fileName, List<Map<String, Object>> dataList) {
    
            //创建一个实例,可以根据需要传入不同的参数,默认sheetName为"sheet"
            ExcelExportUtil excelExportUtil = new ExcelExportUtil();
    
            Map<String, String> titleKeyMap = new LinkedHashMap<String, String>();
    
            //一般keys和titles大小一定要相等,或者keys长度>titles长度
            for (int i = 0; i < titles.size(); i++) {
                titleKeyMap.put(titles.get(i), keys.get(i));
            }
    
    
    
            /*添加横向的行*/
            List<TitleValue> titleValues = new ArrayList<TitleValue>();
            titleValues.add(new TitleValue(fileName, "", titles.size(), 0));
            TitleValueRow row = new TitleValueRow(titleValues, 30);
            excelExportUtil.addTitleValueRow(row);
    
            /*添加标题行*/
            excelExportUtil.addTitlesRow(titleKeyMap.keySet(), 30);
    
            /*添加内容行*/
            excelExportUtil.addContentRow(titleKeyMap, dataList, 20);
    
            /*添加横向的行*/
            List<TitleValue> titleValues1 = new ArrayList<TitleValue>();
    //        titleValues1.add(new TitleValue("末尾也可以添加", "哈哈哈哈", 3, 3));
            TitleValueRow row2 = new TitleValueRow(titleValues1, 50);
            excelExportUtil.addTitleValueRow(row2);
    
            /*下载*/
            excelExportUtil.downloadExcel(response, fileName);
    
        }
    
        public static List<Map<String, Object>> list2Map(List list) {
            if (CollectionUtils.isEmpty(list)) {
                return new ArrayList<>();
            }
            List<Map<String, Object>> resultList = new ArrayList<>();
            list.stream().forEach(o -> {
                resultList.add(object2Map(o));
            });
            return resultList;
        }
    
        public static Map<String, Object> object2Map(Object o) {
            Map<String, Object> parameters = new HashMap<>();
            try {
                Field[] fields = o.getClass().getDeclaredFields();
                for (Field field : fields) {
                    parameters.put(field.getName(), getFieldValueByName(field.getName(), o));
                }
            } catch (Exception e) {
                log.debug("对象toMap错误", e);
            }
            return parameters;
        }
    
        private static Object getFieldValueByName(String fieldName, Object o) {
            try {
                String firstLetter = fieldName.substring(0, 1).toUpperCase();
                String getter = "get" + firstLetter + fieldName.substring(1);
                Method method = o.getClass().getMethod(getter, new Class[]{});
                Object value = method.invoke(o, new Object[]{});
                return value;
            } catch (Exception e) {
                return null;
            }
        }
    
    
    }
    
    
    展开全文
  • 推荐 Word、EXCEL必备工具

    千次阅读 2019-09-20 09:41:36
    EXCEL必备工具箱: EXCEL必备工具箱是一个同时支持EXCEL/WPS插件,自带免费多标签(类似于OfficeTab),安装后就可以使用,与excel/wps完全溶为一体,绝大部分操作执行后可撤销。完美支持32位/64位OFFICE,以及2014...
  • 自己封装的poi操作Excel工具

    万次阅读 多人点赞 2014-10-29 23:55:23
    在上一篇文章《使用poi读写Excel》中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类。 该工具类主要完成的功能是:读取Excel、汇总Excel的功能。在读取时,可以设定开始和结束...
  • JAVA工具类(17)--Java导入导出Excel工具类ExcelUtil

    万次阅读 多人点赞 2016-07-25 12:11:57
    导入导出中会出现各种各样的问题,比如:数据源为空、有重复行等,我自定义了一个ExcelException异常类,用来处理这些问题。 ExcelException类 package common.tool.excel; public class Excel
  • 封装poi操作Excel工具

    千次阅读 2016-02-15 13:12:45
    在上一篇文章《使用poi读写Excel》中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类。  该工具类主要完成的功能是:读取Excel、汇总Excel的功能。在读取时,可以设定开始和...
  • java实现的导出Excel工具

    千次阅读 2019-07-05 14:35:07
    不知不觉一个多月没更新博客了,因为这段时间博主辞职了,过着醉生梦死般的生活。哈哈哈哈 今天开始正式入职新公司,翻看着公司以前写好的...然后最后重点关注了一下util工具类这个包,哎,工具类真的太少了,由此...
  • excel设置下拉菜单多选 如何设置多选Excel下拉菜单 (How to Set up Multiple Selection Excel Drop Down) [Latest update: July 27, 2016] With a bit of Excel VBA programming, you can change an Excel data ...
  • java 导入导出Excel工具类ExcelUtil

    千次阅读 2016-04-27 17:27:29
    前段时间做的分布式集成平台项目中,许多模块都用到了导入导出Excel的功能,于是决定封装一个ExcelUtil类,专门用来处理Excel的导入和导出本项目的持久化层用的是JPA(底层用hibernate实现),所以导入和导出也都是...
  • 阿里出品Excel工具EasyExcel使用小结

    千次阅读 2020-09-10 08:30:00
    前提笔者做小数据和「零号提数工具人」已经有一段时间,服务的对象是运营和商务的大佬,一般要求导出的数据是Excel文件,考虑到初创团队机器资源十分有限的前提下,选用了阿里出品的Excel工...
  • 这是之前Excel转json工具的升级版,增加了转换xml和csv的功能。同时优化了转换速度和数字的存储,特别是科学计数法的数字,现在不会出现一长串数字的情况了。如果需要对某些大数字保留原样转换输出,请设置单元格...
  • Jeecg Excel 工具类注解篇 1

    千次阅读 2013-11-08 16:49:26
    就像注释说的,主要是给这个导出类标示一个ID,这样我们如果出现一个类要对应多个Excel就可以根据ID来做处理 这里介绍下判断函数,估计大家就懂了, 就是寻找Excel这个注解的exportName有没有包含上面我们定义的...
  • Excel怎么调出开发工具选项

    千次阅读 2019-06-08 16:27:25
    1、鼠标左键单击“文件”-“选项”-“自定义功能”,在右侧的主选项卡中,找到并选择“开发工具”,点击“确定”。 菜单栏会出现开发工具选项 ...
  • 导入导出Excel工具类ExcelUtil

    万次阅读 热门讨论 2014-01-28 09:40:43
    最近做的高校平台项目中,许多模块都用到了导入导出Excel的功能,于是决定封装一个ExcelUtil类,专门用来处理Excel的导入和导出   本项目的持久化层用的是JPA(底层用hibernate实现),所以导入和导出也都是基于...
  • Excel操作:分析工具

    千次阅读 2020-05-12 18:30:21
    Excel数据分析工具,相比于主流的专业统计分析软件SPSS、SAS, 其优势如下: 与Excel无缝结合,操作简单,容易上手; 聚合多种统计函数,其中部分工具在生成输出结果表格时,同时还能生成相应图表,有助于对统计...
  • 教你如何解决Excel工具箱控件无效

    万次阅读 2015-09-28 15:21:09
    当你使用Excel的时发现需要在Excel工作表中插入按钮、复选框等控件时发现Excel 2003控件工具箱中的按钮或Excel 2007/2010“开发工具”选项卡“控件”组中的“插入”按钮为灰色不可用,如图。 你可以学习...
  • Excel表格中,由于各种数据的复杂性,可能存在单元格中的数据字号大小、数据内容长度不一而出现,列宽过宽、过窄或者行高过大、过小的问题。常见的解决方法是调整行高、列宽。在Microsoft Excel中,在单元格格式设置...
  • 前篇文章我们介绍了一下Excel中如何设置数据有效性以及COUNTIF函数的用法,这篇文章主要介绍有重复数据时如何统计不重复数据的个数以及通过数据有效性去设置单元格不允许出现重复数据。 统计单列不重复的个数 如下...
  • Excel导入导出工具

    千次阅读 2016-10-18 13:48:24
    excell导入导出工具
  • Excel集成工具箱7.0是利用VBA(Visual Basic for Applications)语言编写的增强应用型插件。包括160个菜单功能和100个左右自定义函数,集160个工具于一身,但体积小于15MB。当安装集成工具箱后,如果您使用Excel ...
  • 用dumpcpp工具生成的excel.h/excel.cpp来操纵Excel

    万次阅读 热门讨论 2013-04-08 19:33:04
    上一篇:在Qt中用QAxObject来操作Excel  1.系统环境:Qt 4.7+MinGW、Win7、QtCreator、Excel 2007  2.生成excel.h、excel.cpp、office.h和office.cpp  dumpcpp ---- ActiveQt模块的命令行工具,可以导出Qt能...
  • easyexcel一个很棒的Excel解析工具

    万次阅读 热门讨论 2019-06-06 13:42:31
    easyexcel一个很棒的Excel解析工具前言Excel格式核心原理对比理解与使用总结 前言 最近手头上有一个项目,其中有一个需求就是要Excel表格导入导出,之前有过类似的经验,不过当时用的是纯POI做表格的导入导出。当时...
  • 本章主要内容:Excel简介,Excel的基本概念及操作,简单小工具
  • 特贡献一份poi读取excel的超强工具类,一行代码读取excel的封装。包括读、写等操作。具体还是跟着代码看吧。 ExcelReadDealUtils:excel读取处理工具类 package all.file.excel.util;import java.io.FileInputStream...
  • 由于项目需要对大量Excel数据进行输入输出处理,在使用JXL,POI后发现很容易出现OOM,最后在网上找到阿里的开源项目EasyExcel能很快速的读取写入超大Excel文件。经过大量的调试优化,现通过JAVA生成104万行20列的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,684
精华内容 15,073
关键字:

怎么设置excel的工具出现