精华内容
下载资源
问答
  • weboffice
    千次阅读
    2021-10-28 10:09:30

    简介

      本文介绍的 WebOffice 控件是由广州市华尔太科技有限公司开发的一款在网页里处理 Office 文件的产品。 WebOffice 控件支持几乎所有对在线文档功能的需求,如在线新建编辑保存多人协作 Office 文件等。
    它具有以下核心功能

      1、远程打开、保存:WebOffice全自动,无需手动上传下载,遵守标准HTTP/HTTPS传输协议,支持服务器同步和异步方式保存文件。
      2、智能填报/读取:可从数据库指定字段提取数据,填充文档指定位置,也可从文档指定位置读取数据到数据库指定字段。
      3、强大的API接口和VBA扩展能力:高效API与VBA扩展,任意办公文档扩展功能均可用VBA整合JS满足业务需求。

      官网入口

    优缺点

      相比于 WPS 提供的 WebOffice,广州市华尔太科技有限公司的 WebOffice 控件具有价格低、接入简单(前端无需额外安装包)和 dome 丰富的优点。

      WebOffice 控件也有很致命的缺点,即客户端需要在本地安装 WebOffice 控件。另外 WebOffice 控件的操作窗口是弹出一个单独的窗口,在这个窗口没法打开控制台,不方便调试,而且样式也很老旧。

      WebOffice 控件好像没有文档(我没找到,这也是写这篇文章的原因),虽然提供了大量的实现各种功能的 demo,但是并没有涵盖所有的操作,所以有时候就得去翻 Microsoft Office 的文档。

    几个可能用得着的文档地址

    备忘

    WORD
    	WebOffice.ActiveDocument.Tables(1); // 返回文件的第一个表格对象
        WebOffice.ActiveDocument.Tables.Count; // 返回文档中表格的数量
        WebOffice.ActiveDocument.Tables(1).Rows.Count; // 返回文档中第一个表格的行数
        WebOffice.ActiveDocument.Tables(1).Columns.Count; // 返回文档中第一个表格的列数
        WebOffice.ActiveDocument.Tables(1).Rows(1).Delete(); // 删除表格的第一行
        WebOffice.ActiveDocument.Application.Selection.Type // number 1 表示没有选中内容。 2 表示选中文本内容
        console.log(WebOffice.IsDirty); // 只读属性,表示文档是否有修改
        // 保护文档,使文档那个不可编辑
        WebOffice.ActiveDocument.Protect(3,false,this.pwd,false,true);
        // 先解除保护,使文档可编辑
        WebOffice.ActiveDocument.Application.ActiveDocument.UnProtect(this.pwd);
    

    dome

    文档操作页面
    <template>
    <div class="web-edit">
        <div class="left">
            <div class="btn-area">
                <el-button size="small" @click="quiteAction">退出</el-button>
                <el-button size="small" type="primary" @click="HttpPostSave">保存</el-button>
            </div>
            <div class="content-warp">
                <template v-for="classifyLevel1 in fieldList" >
                    <p class="title max-title" :key="classifyLevel1.type">
                        <span @click="unfoldAction(classifyLevel1)" class="can-click">
                            {{classifyLevel1.type}}
                            <i v-if="classifyLevel1.isUnfold" class="el-icon-caret-bottom"></i>
                            <i v-else class="el-icon-caret-right"></i>
                        </span>
                    </p>
                    <template v-if="classifyLevel1.isUnfold">
                        <div class="field-box" v-for="classifyLevel2 in classifyLevel1.fieldList" :key="classifyLevel2.classifyName">
                            <p class="title">
                                <span @click="unfoldAction(classifyLevel2)" class="can-click">
                                    {{classifyLevel2.classifyName}}
                                    <i v-if="classifyLevel2.isUnfold" class="el-icon-caret-bottom"></i>
                                    <i v-else class="el-icon-caret-right"></i>
                                </span>
                            </p>
                            <div class="field-list" v-if="classifyLevel2.isUnfold">
                                <span @click="insertAction(item, classifyLevel1.type)" class="item can-click" :class="{'is-checked': item.checked}" v-for="item in classifyLevel2.fieldList" :key="item.id">{{item.name}}</span>
                            </div>
                        </div>
                    </template>
                </template>
                
            </div>
        </div>
        <div class="right">
            <object classid="clsid:FF09E4FA-BFAA-486E-ACB4-86EB0AE875D5" codebase="http://www.officectrl.com/weboffice/WebOffice.ocx#Version=2018,1,6,2" id="WebOffice" width="100%" height="100%" ></object>
        </div>
     </div>
    </template>
    <script>
    import { temDetail, getFieldList, saveFieldsList } from "@/api/baseInfo";
    import { setToken } from '@/utils/auth'
    
    export default {
        data () {
            return {
                strUrl: '',
                doctype: '',
                imgList: [],
                WebOffice: '',
                fileName: '',
                orderId: null,
                editId: null,
                pwd: Date.now().toString(),
                fieldList: [],
                fields: [], // 已选的字段列表
            }
        },
        created() {
            let query = this.$route.query;
            let token = query.token;
            setToken(token, false);
            if (query.id) {
                this.editId = query.id;
                this.getFieldList();
                this.temDetail();
            }
        },
        mounted() {
            
        },
        methods:{
            // 插入表格
            /**
             * data 表格的数据;
             * columnsCount 列数;
             * rowsCount 行数;
             * isAdapt 是否自动调整表格中单元格的大小以适应单元格的内容(word 中)(可选)
             */
            insertTable(data, columnsCount, rowsCount=1, isAdapt=true) {
                const range = WebOffice.ActiveDocument.Application.Selection.Range;
                const table = WebOffice.ActiveDocument.Tables.Add(range, rowsCount, columnsCount, isAdapt);
                if (table.Rows.Count > rowsCount) {
                    table.Rows(table.Rows.Count).Delete();
                    alert("提示:两个表格之间至少有一行空行");
                    return;
                }
                data = Array.isArray(data) ? data : [];
                if (rowsCount < 1) {
                    alert("表格的行数不能小于 1");
                } else {
                    data.forEach((rows, rowIndex) => {
                        if (Array.isArray(rows)) {
                            // 二维数组,不止一行的情况下
                            rows.forEach((cell, columnIndex) => {
                                table.Cell(rowIndex + 1, columnIndex + 1).Range.InsertAfter(cell);
                            })
                        } else {
                            // 只有一行
                            table.Cell(1, rowIndex + 1).Range.InsertAfter(rows);
                        }
                    })
                }
                range = null;
                table = null;
                // WebOffice.ActiveDocument.Tables(1); // 返回文件的第一个表格对象
                // WebOffice.ActiveDocument.Tables.Count; // 返回文档中表格的数量
                // WebOffice.ActiveDocument.Tables(1).Rows.Count; // 返回文档中第一个表格的行数
                // WebOffice.ActiveDocument.Tables(1).Columns.Count; // 返回文档中第一个表格的列数
                // WebOffice.ActiveDocument.Tables(1).Rows(1).Delete(); // 删除表格的第一行
                // WebOffice.ActiveDocument.Application.Selection.Type // number 1 表示没有选中内容。 2 表示选中文本内容
                // console.log(WebOffice.IsDirty); // 只读属性,表示文档是否有修改
                // 保护文档,使文档那个不可编辑
                // WebOffice.ActiveDocument.Protect(3,false,this.pwd,false,true);
                // 先解除保护,使文档可编辑
                // WebOffice.ActiveDocument.Application.ActiveDocument.UnProtect(this.pwd);
            },
            unfoldAction(item) {
                item.isUnfold = !item.isUnfold;
            },
            insertAction(field, type) {
                let isRevise = WebOffice.ActiveDocument.Application.Selection.Type === 2;
                // 先解除保护,使文档可编辑
                // WebOffice.ActiveDocument.Application.ActiveDocument.UnProtect(this.pwd);
                if (isRevise) {
                    WebOffice.ActiveDocument.Application.Selection.Cut(); // 删除所选内容,并将内容移至剪切板
                }
                if (type === "表格") {
                    let columnsCount = field.header.length, rowsCount = 2;
                    let data = [field.header, field.header.map(() => "")];
                    this.insertTable(data, columnsCount, rowsCount);
                } else {
                    // 在光标处插入文本
                    WebOffice.ActiveDocument.Application.Selection.Range.InsertAfter(field.code);
                }
                if (!this.fields.includes(field.id)) {
                    this.fields.push(field.id);
                }
                // 保护文档,使文档不可编辑
                // WebOffice.ActiveDocument.Protect(3,false,this.pwd,false,true);
            },
            temDetail() {
                temDetail(this.editId)
                .then(res => {
                    let strUrl = res.alioss.attachmentUrl;
                    let fileName = res.alioss.fileName;
                    this.fileName = fileName;
                    let doctype = '';
                    let index = fileName.lastIndexOf('.');
                    doctype = fileName.substring( index + 1, fileName.length);
                    const WebOffice = document.getElementById('WebOffice');
                    // 正确设置 UserName 和 Authorizer 才能正确打开
                    WebOffice.UserName="公司名称";
                    WebOffice.Authorizer="www.officectrl.com";
                    this.$nextTick(() => {
                        setTimeout(() => {
                            WebOffice.MenuBar = false;
                            WebOffice.Toolbars = true; // 是否显示工具栏
                            WebOffice.Titlebar = false;
                            WebOffice.Open(strUrl, true, doctype);
                            // WebOffice.ActiveDocument.Protect(3,false,this.pwd,false,true);
                        }, 1000)
                    })
                })
                .catch(error => {
                    console.log(error);
                })
            },
            quiteAction() {
                window.close();
            },
           	// 保存文件(同步保存)
            HttpPostSave() {
                this.saveFieldsList();
                const strSaveUrl = process.env.VUE_APP_BASE_API + '/api/retemplate/upload';
                try { 
                    WebOffice.HttpInit();
                    WebOffice.HttpAddPostString('id', this.editId);
                    WebOffice.HttpAddPostCurrFile("docfile","");//此句为固定语句,不管是保存word还是excel,ppt等都这样写
                    const strResults = WebOffice.HttpPost(strSaveUrl);
                    // console.log(strResults);
                    // strResults;//如果保存成功,编程时让服务器接收代码如upload.jsp,upload.aspx,upload.php等返回空值或OK字串。
                    // if(strResults.indexOf('ok') > 1)
                    alert('office文档保存成功!');
                }
                catch(e) {
                    alert('发生错误!请使用查阅返回值!');
                }	
            },
            // 获取可配置的字段
            getFieldList() {
                getFieldList(this.editId)
                .then(res =>{
                    this.fieldList = res.map(item => {
                        this.$set(item, "isUnfold", true);
                        if(item.fieldList && item.fieldList.length) {
                            item.fieldList.forEach(el => {
                                this.$set(el, "isUnfold", true);
                            })
                        }
                        return item;
                    });
                })
                .catch(err => {
                    console.log(err);
                })
            },
            saveFieldsList() {
                let params = {
                    id: this.editId,
                    fields: this.fields
                }
                saveFieldsList(params)
                .then(res => {
                    alert('保存成功');
                })
                .catch(err => {
                    console.log(err);
                })
            },
        }
    } 
    </script> 
    <style lang="scss" scoped>
    .web-edit {
        display: flex;
        width: 100%;
        height: 100%;
        box-sizing: border-box;
        overflow: hidden;
        background-color: #fff;
        .can-click {
            cursor: pointer;
        }
        .left {
            display: flex;
            flex-direction: column;
            font-size: 14px;
            width: 400px;
            padding-left: 10px;
            .btn-area {
                padding: 30px 0 20px;
                text-align: center;
                .el-button {
                    width: 100px;
                    & + .el-button {
                        margin-left: 20px;
                    }
                }
            }
            .content-warp {
                flex: 1;
                overflow-x: hidden;
                overflow-y: auto;
            }
            .title {
                .el-icon-caret-right, .el-icon-caret-bottom {
                    color: #409eff;
                }
            }
            .max-title {
                margin-top: 10px;
                font-size: 16px;
            }
            .field-box {
                padding: 10px 15px 0;
                .field-list {
                    padding: 10px 10px 0;
                    .item {
                        display: inline-block;
                        padding: 0 8px;
                        margin: 5px 15px 5px 0;
                        font-size: 14px;
                        line-height: 23px;
                        background-color: #eee;
                        white-space: nowrap;
                        border-radius: 3px;
                        &:hover, .is-checked{
                            color: #fff;
                            background-color: #409eff;
                        }
                    }
                }
            }
        }
        .right {
            flex: 1;
            height: 100%;
            #WebOffice {
                width: 100%!important;
                height: 100%!important;
            }
        }
        
    }
    </style>
    
    打开编辑页面的方法
    // 编制动作
          editAction(id) {
            let pre = "weboffice://|Officectrl|"; // 这个很关键!!!
            let host = window.location.host;
            let browerType = this.getBrowser();
            let token = getToken();
            if (browerType == 0) {
              const { href } = this.$router.resolve({
                name: "edit",
                query: { 'id': id, 'token': token}
              });
              window.open(href, '_blank');
            } else {
              let strUrl = pre + 'http://' + host + '/#/edit?id=' + id + '&token=' + token;
              window.open(strUrl, '_blank');
            }
          },
          // 检查浏览器类型
          getBrowser() {	
            let Sys = {};
            let ua = navigator.userAgent.toLowerCase();
            let s;
            let ver;
            (s = ua.match(/edge\/([\d.]+)/)) ? Sys.edge = s[1] :
            (s = ua.match(/rv:([\d.]+)\) like gecko/)) ? Sys.ie = s[1] :
            (s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] :
            (s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] :
            (s = ua.match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] :
            (s = ua.match(/opera.([\d.]+)/)) ? Sys.opera = s[1] :
            (s = ua.match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0;
            if (Sys.edge) return 1;
            if (Sys.ie) return 0;
            if (Sys.firefox) return 1;
            if (Sys.chrome){ ver = Sys.chrome;ver.toLowerCase();var arr = ver.split('.');if(parseInt(arr[0])>43){return 1;}else{return 0;}}
            if (Sys.opera) return 1;
            if (Sys.safari) return 1;
            return 1;
          },
    
    效果

    请添加图片描述

    更多相关内容
  • 目前WebOffice使用比较多主要有三个公司的产品,分别是江西金格(iWebOffice)、北京点聚(WebOffice)和重庆软航(NTKO Office)。但是点聚的是免费的,虽然有欠缺之处,但是经过个人修改还是比较好用的,关键一点...
  • 简单易上手,兼容多种语言开发教程,合适新手学习
  • WEBOFFICE是标准的ACTIVEX组件,支持在应用开发平台中嵌入整合。 C/S平台:VB、VC、Delphi … … B/S平台:ASP、PHP、Java、ASP.Net、C#.Net … … 二、 主要功能 ID 功能项 详细说明 1 文件格式 支持大多数的文件...
  • Web Office Suite-开源

    2021-05-01 23:38:02
    一个基于Web的办公套件,重点在于实时协作和内置的在线研究工具。 它旨在在功能和易用性方面与当前可用的在线办公套件竞争。 这是一个雄心勃勃和加速的职业
  • weboffice

    2019-04-21 01:17:31
    NULL 博文链接:https://vincents.iteye.com/blog/1836509
  • weboffice_v6.0.5.0.cab 文件下载,在线预览OFFICE文档的插件,非常实用,只需在客户端双击安装即可,亲测可用
  • 点聚weboffice 7.0.1.8控件+开发文档,WebOffice文档控件+开发文档,OA集成首选,无纸化办公首选。
  • 由于iWebOffice2015原生对外接口高度抽象,用户如果要实现某个功能,需要对原生接口进行二次封装,这无疑增加了用户集成iWebOffice2015的难度;同时,对于已集成过金格iWebOffice200X(iWebOffice2003、iWebOffice...
  • 在网页中实现动态word/excel数据填充、用户输入提交,并且无需Web服务器端OLE自动化word/excel。  2.独特的文档安全性:防下载、防拷贝、防粘贴、防篡改、防打印。  3.集成简单:一行代码即可搞定。  4.友好的...
  • 点聚weboffice 7.0.1.8控件,最新版本。适用于各种oa,配合ff-activex可以在任意浏览器适用。
  • 北京点聚开发的免费在线word excel插件 北京点聚开发的免费在线word excel插件 北京点聚开发的免费在线word excel插件 北京点聚开发的免费在线word excel插件
  • 内含 WebOffice 参考手册及入门教程,还有 vue 版本的 dome。
  • 点聚weboffice 6.0

    2018-04-25 13:57:23
    WebOffice安装包内包含: 1.Weboffice安装包(仅包含WebOffice控件) 2.WebOffice接口sdK 3.WebOffice网页接口调用例子 4.DES手写及签章系统(Office签章系统)试用版。 5.演示章及证书 6.点聚产品白皮书
  • webOffice V7.0.1.0

    2017-02-14 15:04:34
    个人用于 开发 java web 程序,这个版本打开数据较快。(win10、win7 都兼容,office wps 都兼容《win7 下 office 2007 打开 docx 文件会出现卡死现象》)
  • weboffice,Version=6,0,0,0 ,提供在线编辑word,excel,ppt功能
  • 点聚weboffice + demo+sdk+控件
  • weboffice控件和接口文档,浏览器安装不了的可以直接点击里面的exe文件执行安装;一些常用的接口文档都在里面,保证可以使用。
  • jeesite部署时,会出现无法下载部分jeesite-XXX的jar包的问题,可将jar包直接引用
  • WebOffice(Ie)

    2018-12-07 12:21:20
    webOffice网络文档控件;能够在浏览器窗口中直接编辑Word、Excel、PowerPoint、WPS、CEB等文档并保存到Web服务器上。实现文档和电子表格和数据库的统一管理。同时支持痕迹保留,手写签名,电子印章等办公自动化系统...
  • 点聚weboffice Demo可用

    2018-08-03 09:54:05
    点聚weboffice,调用activeX控件在线打开操作word代码,需要本机安装word或者wps
  • weboffice ocx 控件

    2018-10-08 16:43:17
    weboffice ocx 控件,用于word在线操作,可应用在OA办公系统
  • weboffice for chrome firefox

    热门讨论 2015-04-01 15:45:10
    weboffice for chrome firefox,点聚weboffice兼容谷歌chrome与firefox浏览器,解决了weboffice在谷歌下无法使用的问题
  • weboffice控件的使用

    2014-12-26 18:15:09
    关于web网页中weboffice控件使用
  • crack weboffice

    2019-05-27 02:12:08
    NULL 博文链接:https://film.iteye.com/blog/593502
  • WebOffice是一款强大的文档编辑组件,点聚weboffice可以嵌入网页中,支持多种文件格式以及更快的浏览速度,这个是点聚weboffice的官方网站:http://www.dianju.cn/p/weboffice/,以及点聚weboffice的官方最新版本下载...
  • webOffice示例

    2018-04-10 13:35:45
    weboffice示例,文本打开office word文件,可以提取自己添加的批注到另一个word文档,需要机器上装word软件支持
  • 点聚weboffice java jsp 保存到服务器 代码仅供参考!
  • webOffice开发文档,轻松掌握webOffice接口,有需要的小伙伴可以下载(含webOffice插件和基本使用方法)
  • WebOffice.ocx

    2018-08-02 14:36:45
    使用这个ocx注册后,可以做MFC内嵌使用,比如多文档,单文档以及对话框工程!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 100,519
精华内容 40,207
关键字:

weboffice