首页 > 其他分享 >Confluence的Excel插件Elements Spreadsheet安装

Confluence的Excel插件Elements Spreadsheet安装

时间:2023-09-08 20:55:48浏览次数:36  
标签:插件 Elements return Excel Response import message type public

背景

Confluence是现在广泛使用的团队协作文档系统。虽然自身带了一些表格编辑功能,但表格的整体功能较弱,比如不能通过Excel文件进行导入导出,表格在复制到Excel时格式会比较奇怪等等。对于未完全整合流程到Confluence上的团队,信息从Excel到在线文档系统的流转是个巨大的工作量。

介绍

Elements Spreadsheet作为Confluence的插件可以有效的解决上面的部分问题,通过这个插件可以接近完美导入导出Excel到Confluence系统中(试了Excel太大的话会莫名其妙的编辑中崩溃),Excel文档可以完美嵌入到Confluence的网页中,同时支持在线编辑与占用提示,公式等等功能,参考Confluence的介绍与文档。Elements Spreadsheet for Confluence | Atlassian Marketplace

安装步骤

整个安装步骤参考Confluence安装Drawio插件 - MrHeartTired (ltang.me)

  1. 首先在官方链接下载当前版本支持的插件。(前面的官方链接进入Version页面选择)

  2. 其次,再IDE(Idea)中新建如下文件与对应的包目录:

AbstractSpreadsheetRestService.java文件与对应的包目录。


package com.valiantys.software.spreadsheets.rest;  
  
import com.atlassian.upm.api.license.PluginLicenseManager;  
import com.valiantys.software.spreadsheets.rest.model.ErrorModel;  
import com.valiantys.software.spreadsheets.service.error.ErrorType;  
import com.valiantys.software.spreadsheets.service.error.SpreadsheetError;  
  
import javax.servlet.http.HttpServletRequest;  
import javax.ws.rs.core.Response;  
import javax.ws.rs.core.Response.Status;  
  
public abstract class AbstractSpreadsheetRestService {  
    public static final String ATLASSIAN_DEV_MODE = "atlassian.dev.mode";  
    private final PluginLicenseManager pluginLicenseManager;  
  
    protected AbstractSpreadsheetRestService(PluginLicenseManager pluginLicenseManager) {  
        this.pluginLicenseManager = pluginLicenseManager;  
    }  
  
    protected boolean isLicenseValid() {  
        return true;  
    }  
  
    private boolean isDevMode() {  
        String devMode = System.getProperty("atlassian.dev.mode");  
        return Boolean.parseBoolean(devMode);  
    }  
  
    protected ErrorModel toErrorModel(SpreadsheetError error) {  
        return new ErrorModel(error.getMessage());  
    }  
  
    protected Response toResponse(SpreadsheetError error) {  
        ErrorType type = error.getType();  
        if (type == ErrorType.DATA_CONVERSION_ERROR) {  
            return Response.status(Status.BAD_REQUEST).entity(new ErrorModel(error.getMessage())).build();  
        } else if (type == ErrorType.FORBIDDEN) {  
            return Response.status(Status.FORBIDDEN).entity(new ErrorModel(error.getMessage())).build();  
        } else if (type == ErrorType.MISSING_DATA) {  
            return Response.status(Status.NOT_FOUND).entity(new ErrorModel(error.getMessage())).build();  
        } else {  
            return type == ErrorType.INVALID_REQUEST ? Response.status(Status.BAD_REQUEST).entity(new ErrorModel(error.getMessage())).build() : Response.status(Status.INTERNAL_SERVER_ERROR).entity(new ErrorModel(error.getMessage())).build();  
        }  
    }  
  
    protected String getCharset(HttpServletRequest request) {  
        String characterEncoding = request.getCharacterEncoding();  
        return characterEncoding == null ? "UTF-8" : characterEncoding;  
    }  
}

ErrorModel文件与对应的包目录

package com.valiantys.software.spreadsheets.rest.model;  
  
public class ErrorModel {  
  
    private String message;  
  
    public ErrorModel() {  
    }  
  
    public ErrorModel(String message) {  
        this.message = message;  
    }  
  
    public String getMessage() {  
        return this.message;  
    }  
  
    public void setMessage(String message) {  
        this.message = message;  
    }  
}

ErrorType文件与对应的包目录

package com.valiantys.software.spreadsheets.service.error;  
  
public enum ErrorType {  
    DATA_CONVERSION_ERROR,  
    FORBIDDEN,  
    INVALID_REQUEST,  
    INTERNAL_ERROR,  
    MISSING_DATA;  
  
    private ErrorType() {  
    }  
}

SpreadsheetError文件与对应的包目录

package com.valiantys.software.spreadsheets.service.error;  
  
import javax.ws.rs.core.Response;  
  
public class SpreadsheetError {  
    private ErrorType type;  
    private String message;  
  
    public SpreadsheetError() {  
    }  
  
    public SpreadsheetError(ErrorType type) {  
        this.type = type;  
    }  
  
    public SpreadsheetError(ErrorType type, String message) {  
        this.type = type;  
        this.message = message;  
    }  
  
    public static SpreadsheetError build(ErrorType type) {  
        return new SpreadsheetError(type);  
    }  
  
    public static SpreadsheetError build(ErrorType type, String message) {  
        return new SpreadsheetError(type, message);  
    }  
  
    public ErrorType getType() {  
        return this.type;  
    }  
  
    public void setType(ErrorType type) {  
        this.type = type;  
    }  
  
    public String getMessage() {  
        return this.message;  
    }  
  
    public void setMessage(String message) {  
        this.message = message;  
    }  
  
    public String toString() {  
        return "Error " + this.type.name() + ": " + this.message;  
    }  
  
    public Response build() {  
        return null;  
    }  
}

这一步中只有第一个AbstractSpreadsheetRestService编译出来的的class文件是需要的,其他只是为了解决编译报错。

  1. 在刚安装的jdk环境下,以下两个包会提示找不到,这两个包理论上是可以直接导入的
import javax.ws.rs.core.Response;  
import javax.ws.rs.core.Response.Status;  

但是由于我对java不太熟悉,java环境都是新装的,所以这两个包我也是按步骤1的方式,补的文件用来编译。

Response文件与对应的包目录。

  
package javax.ws.rs.core;  
  
import java.lang.annotation.Annotation;  
import java.net.URI;  
import java.util.Date;  
import java.util.Iterator;  
import java.util.List;  
import java.util.Locale;  
import java.util.Map;  
import java.util.Set;  
  
public abstract class Response {  
    protected Response() {  
    }  
  
    public static ResponseBuilder status(Status status) {  
        return  null;  
    }  
  
    public interface StatusType {  
  
    }  
  
    public enum Status implements Response.StatusType {  
  
        BAD_REQUEST,  
        FORBIDDEN,  
        NOT_FOUND,  
        INTERNAL_SERVER_ERROR,  
  
    }  
}

ResponseBuilder文件与包目录。

package javax.ws.rs.core;  
  
import com.valiantys.software.spreadsheets.rest.model.ErrorModel;  
import com.valiantys.software.spreadsheets.service.error.SpreadsheetError;  
  
public class ResponseBuilder {  
  
    public SpreadsheetError entity(ErrorModel errorModel) {  
        return  null;  
    }  
}

不要在意具体的代码逻辑与包关系,目的只是为了编译AbstractSpreadsheetRestService.class。同样PluginLicenseManagerLicenseService也需要像参考文章一样补出,这里由于没有代码就不列出来了。

替换与安装

文件编辑完成后,使用7z打开elements-spreadsheet.obr文件,替换AbstractSpreadsheetRestService.class文件并保存。然后按参考文章的方式上传到Confluence安装即可(使用管理员账号登录confluence,找到插件管理 -> 上传插件 -> 选择修改后的obr包,点击上传)。安装成功后,虽然显示试用,但是这时候就已经可以在Confluence中导入并保存Excel文件了,真实的试用状态下Excel导入后是无法保存的。到此安装完成,可以尽情在网页中编辑Excel了。

标签:插件,Elements,return,Excel,Response,import,message,type,public
From: https://www.cnblogs.com/zhangchen-trunk/p/17688530.html

相关文章

  • React项目笔记-环境搭建、路由封装(跳转Navigate、懒加载lazy)、模块化样式引入、状态管
    环境准备nodev16.15.0npm8.5.5AntDesignofReact:https://ant.design/docs/react/introduce-cn一,创建项目npminitvite√Projectname:...vite-project-react√Selectaframework:»React√Selectavariant:»TypeScript然后使用vscode打开项目,由于......
  • JS Blob 下载时导出csv,通过excel软件打开中文乱码的问题:
    proxy.$http.post(url,commitObject.value,{headers:{responseType:'blob'}}).then((p)=>{if(p.data.code==200||p.status==200){ElMessage.success('预测成功,等待结果展示!')if(commitObject.value.returnTyp......
  • Excel联动(wps)
    Excel联动(wps)https://www.wps.cn/learning/course/detail/id/330423.htmldemo:https://files.cnblogs.com/files/zt007/Excel联动test.rar?t=1694151538&download=true......
  • [Maven] maven插件系列之maven-shade-plugin
    [Maven]maven插件系列之maven-shade-plugin1插件简述/PluginOverview1.1定义与目的/Definition&GoalsOfficialDefinitionApacheMaven:maven-shade-pluginThispluginprovidesthecapabilitytopackagetheartifactinanuber-jar,includingitsdependenc......
  • 使用EasyExcel下载文件时,前端获取不到后端返回的文件名,无法下载到本地
    【问题描述】使用EasyExcel下载文件时,前端获取不到后端返回的文件名,无法下载到本地 【原因分析】实际上文件的流后端已经返回了,只是缺少了Content-Disposition属性返回,前端无法获取到文件名;privatestaticOutputStreamgetOutputStream(StringfileName,HttpServletRespon......
  • POI向Excel中写入数据及追加数据
    importorg.apache.poi.xssf.usermodel.XSSFCell;importorg.apache.poi.xssf.usermodel.XSSFRow;importorg.apache.poi.xssf.usermodel.XSSFSheet;importorg.apache.poi.xssf.usermodel.XSSFWorkbook;importjava.io.*;importjava.util.ArrayList;importjava.util......
  • 推荐一个react上拉加载更多插件:react-infinite-scroller
    推荐一个react上拉加载更多插件:react-infinite-scroller 在开发网页和移动应用时,经常需要处理大量数据的展示和加载。如果数据量非常大,一次性全部加载可能会导致页面卡顿或崩溃。为了解决这个问题,我们可以使用无限滚动(InfiniteScroll)的技术。React提供了一个方便的组件库,即......
  • azure data studio SQL扩展插件开发笔记
    node.js环境下拉取脚手架npminstall-gyogenerator-azuredatastudioyoazuredatastudio改代码运行调试扩展,在visualstudiocode中安装插件即可然后visualstudiocode打开进行修改运行即可image.png运行后自动打开auzredatastudio了,下面是我开发的扩展,......
  • vscode插件开发笔记
    https://code.visualstudio.com/api/get-started/your-first-extensionnpminstall-gyogenerator-codeyocode正常开发选择ts或者js结果如下,package.json的contributes.commands节点控制命令生命,contributes.menus定义菜单extension.ts里面注册事件exportfunctionactivat......
  • Excel 当单元格内容为空时自动隐藏本行
    宏代码如下:PrivateSubWorksheet_Change(ByValTargetAsRange)IfTarget.Column=3ThenIfTarget.Value=""ThenTarget.EntireRow.Hidden=TrueEndIfEndIfEndSub首先鼠标右击该工作表名称标签,点击“查看代码”命令,随即自动进入到VBA代码编辑窗口,然后我们将上面的一段......