Office加载项对Excel进行读写操作
转载自我的个人主页
前言
在开发ExcelWeb插件的时候,一大亮点就是可以在web项目中操作Excel,读取Excel的内容,也可以将服务端的数据写入的 Excel中,大大方便的用户使用Excel,提高工作效率
Ranges
Ranges表示Excel的区域,例如一个单元格的区域是=A1,多个单元格的区域,B1:B4表示连续的4个单元格,对Excel 内容的读写,即是对Ranges的读写。
Ranges的属性
- address,表示Ranges的地址,例如:A1,B1:B4 
- values,二维数组,表示区域的实际值 
- texts,二维数组,表示区域的展示值 
- formulas,二维数组,表示区域的公式,excel可以使用公式,使用之后,看到的值是公式计算之后的值,如果想要知道使用了那些公式,就需要使用formulas属性 
- format,区域的字体格式,可以该表文字字体,颜色,也可以改变区域的背景色。 
- numberFormat,二维数组,区域的格式,有文本、日期、数值等,和Excel右击设置单元格的格式里所有的格式一致 - 格式 - 值 - General - General - Number - 0 - Currency - $#,##0.00;[Red]$#,##0.00 - Accounting - ($* #,##0.00);($* (#,##0.00);($* "-"??);(@_) - Date - m/d/yy - Time - [$-F400]h:mm:ss am/pm - Percentage - 0.00% - Fraction - # ?/? - Scientific - 0.00E+00 - Text - @ - Special - ;; - Custom - #,##0_);Red - 来源 - Stack Overflow上的回答 
Ranges的方法
- load(),表示接下来你要使用哪个属性,需要在此处表明,例如,你要使用address,则 range.load('address')。
- clear(),清空该区域
- delete(),删除该区域,并指定是否需要下面的值上移,或者右面的值左移,参数枚举值如下:
- Excel.DeleteShiftDirection.up:删除后,下面的值,向上移动填充空值
- Excel.DeleteShiftDirection.left:删除后,右面的值,向左移动填充空值
 
- select(),选中该区域
- copyFrom(),将指定区域的值复制给当前区域
具体用法
准备工作:
- 首先在vue中要安装excel-addin
npm install excel-addin --save
- 在index.html中假如office.js
  <script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>
- 如果想要在Excel初始化时做些什么,还需要在main.js中假如下面的代码
const Office = window.Office
Office.initialize = () => {
    //初始化内容
}
- 操作Excel的行为均要写在特定方法里,即:
//其中context表示Excel的上下文,操作Excel的东西均通过该参数
 Excel.run(function(context) {
     //此处写操作Excel的方法
     //处理完之后要提交,Excel才会识别,另外所有的//读写数据的操作均在,
     //context.sync().then(=>{
         //此处读写数据
     })
     return context.sync()
 }
写入
    write: function() {
      Excel.run(function(context) {
        //获取指定名字的工作薄sheet
        // var sheet = context.workbook.worksheets.getItem('sheetName')
        //获取当前活动工作薄
        var sheet = context.workbook.worksheets.getActiveWorksheet()
        var data = [
          ['Product', 'Qty', 'Unit Price', 'Total Price'],
          ['Almonds', '2', '7.5', '15'],
          ['Coffee', '1', '34.5', '34.5'],
          ['Chocolate', '5', '9.56', '47.8'],
          ['', '', '', '97.3']
        ]
        //此二维数组的长度要和数据的保持一致,否则无效
        var formats = [
          ['@', '@', '@', '@'], //设置格式为文本
          ['0.00', '0.00', '0.00', '0.00'],
          ['0.00', '0.00', '0.00', '0.00'],
          ['0.00', '0.00', '0.00', '0.00'],
          ['0.00', '0.00', '0.00', '0.00']
        ]
        var range = sheet.getRange('A1:D5')
        //选中该区域
        range.select()
        // 设置背景色和字体
        range.format.fill.color = '#4472C4'
        range.format.font.color = 'white'
        //设置区域的格式
        range.numberFormat = formats
        //表示加载values属性,如果不加载在下面是不可以使用的
        range.load('values')
        return context.sync().then(function() {
          //写入方法必须在该方法内执行才有效
          range.values = data
        })
      }).catch(_this.errorHandler)
    },
读取数据
read: function() {
      let _this = this
      Excel.run(function(context) {
        //获取指定名字的工作薄sheet
        // var sheet = context.workbook.worksheets.getItem('sheetName')
        // 获取当前选中的单元格
        var range = context.workbook.getSelectedRange()
        //获取当前选中的单元格
        //表示加载以下属性,如果不加载在下面是不可以使用的
        range.load('values')
        range.load('address')
        range.load('formulas')
        range.load('text')
        return context.sync().then(function() {
          //写入方法必须在该方法内执行才有效
          _this.content = {
            values: range.values,
            formulas: range.formulas,
            address: range.address,
            texts: range.text
          }
          console.log(_this.content)
        })
      }).catch(_this.errorHandler)
    }
删除某一行数据
deleteOne: function() {
      let _this = this
      Excel.run(function(context) {
        //获取指定名字的工作薄sheet
        // var sheet = context.workbook.worksheets.getItem('sheetName')
        // 获取当前选中的单元格
        var sheet = context.workbook.worksheets.getActiveWorksheet()
        var range = sheet.getRange('A2:D2')
        range.delete(Excel.DeleteShiftDirection.up)
        //提交操作
        return context.sync()
      }).catch(_this.errorHandler)
    },
清空所有数据
clear: function() {
      let _this = this
      Excel.run(function(context) {
        //获取指定名字的工作薄sheet
        // var sheet = context.workbook.worksheets.getItem('sheetName')
        // 获取当前选中的单元格
        var sheet = context.workbook.worksheets.getActiveWorksheet()
        var range = sheet.getRange('A1:D4')
        range.clear()
        //提交操作
        return context.sync()
      }).catch(_this.errorHandler)
    },
参考链接
项目地址
Office加载项对Excel进行读写操作的更多相关文章
- Office加载项
		出自我的个人主页 Alvin Blog 前言 前一段时间公司做了有关Excel 加载项的开发,也遇到了很多坑,所以在此记录一下,有两个原因,1.留给以后在用到加载项的时候,复习所用,避免 跳进同一个坑 ... 
- Office加载项安装
		出自我的个人主页 Alvin Blog 前言 Excel加载项离不开安装,Excel加载项本身安装及其简单,但这是在申请下来Office开发者账户之后,再次之前都得自行安装 线上安装 微软申请开发者账 ... 
- office加载项部署清单签名的证书或其位置不受信任
		异常信息: System.Security.SecurityException: 此应用程序中的自定义功能将不起作用,原因是用于为 BIMT写作指导 的部署清单签名的证书或其位置不受信任.请向管理员寻 ... 
- VSTO学习笔记(三) 开发Office 2010 64位COM加载项
		原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ... 
- word加载项打包发布注意事项总结
		最近在做一个word加载项,发布的时候还是有很多坑的现在总结一下:发布工具为Advanced Installer 11.0 网盘地址:http://pan.baidu.com/s/1i4GK3g5 1 ... 
- VSTO - 使用Excel加载项生成表和图表
		此示例显示如何创建Excel的加载项,使用户可以在其工作表中选择库存符号,然后生成一个新工作表,显示库存的历史性能. 工作表包含数据表和图表. 介绍Excel加载项通常不知道工作表包含什么.典型的加载 ... 
- 下载安装与配置Excel 2013数据挖掘加载项(SQL Server 2012 SP1 +  SQLServer2012_DMAddin.msi)
		一.系统要求 在安装这个数据挖掘加载项前,你的机器必须要可以支持如下的相关系统设备: (1)操作系统:windows 7 和 windows 8,暂时不支持 windows 10. (2)excel ... 
- Excel催化剂开源第3波-修复ExcelCom加载项失效问题及WPS可调用Com加载项的方法
		为了还原一个干净无侵扰的网络世界,本文将不进行大规模地分发,若您觉得此文有用,不妨小范围地分享到真正有需要的人手中 功能概述 修复ExcelCom加载项常见问题,如每次需重新勾选COM加载项或COM加 ... 
- 关于XLL加载项动态加载、卸载的演示及XLL函数自定义类型注册的演示
		1.在XLL中,把函数定义成不同的类型,在Excel中的实际效果也不同,具体如下: pxMacroType value ... 
随机推荐
- pytorch tensor与numpy转换
			从官网拷贝过来的,就是做个学习记录.版本 0.4 tensor to numpy a = torch.ones(5) print(a) 输出 tensor([1., 1., 1., 1., 1.]) ... 
- Java快速IO(ACM)必备
			en.... 无非用到的是 1. new Scanner(System.in); 2.new BUfferReader(new InputStreamReader(System.in); 3.Syst ... 
- matplolib实例之 城市气候与海洋的关系研究
- 修改阿里云ESC Centos 7.4 防火墙开放端口
			例如系统:Centos 7.4操作如下 1,进入 cd /etc/firewalld/zones/ 目录 2,编辑 vim public.xml 3,按i或insert键进入编辑模式 4,在<z ... 
- Android + Appium 自动化测试完整的环境配置及代码详解
			环境的的搭建 参考大神博客:https://www.cnblogs.com/fnng/p/4540731.html 该博客有一套详细的入门教程,奈何时间有点久远有些东西不能用了,但是参考价值还是有滴. ... 
- js实现放大镜效果
			原理: 鼠标在小图片上移动时,通过捕捉鼠标在小图片上的位置,定位大图片的相应位置: 放大镜的移动方向和大图片的移动方向:横向和纵向都是相反,才可以保证同步: 需要元素:大图和小图,存放大图和小图的容器 ... 
- 电量分析工具 Battery Historian 的配置及使用
			1.Building from source code(通过各种配置后从源码构建) 官方流程看似很麻烦,但一上手,很快就搞定,让我情何以堪. ps:以下均是参考官方及网友做的 copy https:/ ... 
- 数据结构---Java---HashMap
			1.概述 [hash冲突]: 对某个元素进行哈希函数运算,得到一个地址值,要进行插入时,发现此地址被占用,称为hash冲突(哈希碰撞): [hash冲突解决]: 开放定址(发生冲突,继续寻找下一块未被 ... 
- tomcat直接访问webinfo里的jsp
			<servlet> <servlet-name>requestScope.jsp</servlet-name> <jsp-file>/WEB-INF/r ... 
- 移动端的click点透问题
			在移动端开发中,有时会出现click点透的问题. 一.什么是click点透 以下情况,在B元素上有半透明红色遮盖层A,黄色B元素内有可点击链接C. tips:以下举例仅针对webkit内核浏览器,所有 ... 
