经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 编程经验 » 查看文章
Confluence的Excel插件Elements Spreadsheet安装
来源:cnblogs  作者:时风拖拉机  时间:2023/9/9 10:38:33  对本文有异议

背景

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文件与对应的包目录。

  1. package com.valiantys.software.spreadsheets.rest;
  2. import com.atlassian.upm.api.license.PluginLicenseManager;
  3. import com.valiantys.software.spreadsheets.rest.model.ErrorModel;
  4. import com.valiantys.software.spreadsheets.service.error.ErrorType;
  5. import com.valiantys.software.spreadsheets.service.error.SpreadsheetError;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.ws.rs.core.Response;
  8. import javax.ws.rs.core.Response.Status;
  9. public abstract class AbstractSpreadsheetRestService {
  10. public static final String ATLASSIAN_DEV_MODE = "atlassian.dev.mode";
  11. private final PluginLicenseManager pluginLicenseManager;
  12. protected AbstractSpreadsheetRestService(PluginLicenseManager pluginLicenseManager) {
  13. this.pluginLicenseManager = pluginLicenseManager;
  14. }
  15. protected boolean isLicenseValid() {
  16. return true;
  17. }
  18. private boolean isDevMode() {
  19. String devMode = System.getProperty("atlassian.dev.mode");
  20. return Boolean.parseBoolean(devMode);
  21. }
  22. protected ErrorModel toErrorModel(SpreadsheetError error) {
  23. return new ErrorModel(error.getMessage());
  24. }
  25. protected Response toResponse(SpreadsheetError error) {
  26. ErrorType type = error.getType();
  27. if (type == ErrorType.DATA_CONVERSION_ERROR) {
  28. return Response.status(Status.BAD_REQUEST).entity(new ErrorModel(error.getMessage())).build();
  29. } else if (type == ErrorType.FORBIDDEN) {
  30. return Response.status(Status.FORBIDDEN).entity(new ErrorModel(error.getMessage())).build();
  31. } else if (type == ErrorType.MISSING_DATA) {
  32. return Response.status(Status.NOT_FOUND).entity(new ErrorModel(error.getMessage())).build();
  33. } else {
  34. 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();
  35. }
  36. }
  37. protected String getCharset(HttpServletRequest request) {
  38. String characterEncoding = request.getCharacterEncoding();
  39. return characterEncoding == null ? "UTF-8" : characterEncoding;
  40. }
  41. }

ErrorModel文件与对应的包目录

  1. package com.valiantys.software.spreadsheets.rest.model;
  2. public class ErrorModel {
  3. private String message;
  4. public ErrorModel() {
  5. }
  6. public ErrorModel(String message) {
  7. this.message = message;
  8. }
  9. public String getMessage() {
  10. return this.message;
  11. }
  12. public void setMessage(String message) {
  13. this.message = message;
  14. }
  15. }

ErrorType文件与对应的包目录

  1. package com.valiantys.software.spreadsheets.service.error;
  2. public enum ErrorType {
  3. DATA_CONVERSION_ERROR,
  4. FORBIDDEN,
  5. INVALID_REQUEST,
  6. INTERNAL_ERROR,
  7. MISSING_DATA;
  8. private ErrorType() {
  9. }
  10. }

SpreadsheetError文件与对应的包目录

  1. package com.valiantys.software.spreadsheets.service.error;
  2. import javax.ws.rs.core.Response;
  3. public class SpreadsheetError {
  4. private ErrorType type;
  5. private String message;
  6. public SpreadsheetError() {
  7. }
  8. public SpreadsheetError(ErrorType type) {
  9. this.type = type;
  10. }
  11. public SpreadsheetError(ErrorType type, String message) {
  12. this.type = type;
  13. this.message = message;
  14. }
  15. public static SpreadsheetError build(ErrorType type) {
  16. return new SpreadsheetError(type);
  17. }
  18. public static SpreadsheetError build(ErrorType type, String message) {
  19. return new SpreadsheetError(type, message);
  20. }
  21. public ErrorType getType() {
  22. return this.type;
  23. }
  24. public void setType(ErrorType type) {
  25. this.type = type;
  26. }
  27. public String getMessage() {
  28. return this.message;
  29. }
  30. public void setMessage(String message) {
  31. this.message = message;
  32. }
  33. public String toString() {
  34. return "Error " + this.type.name() + ": " + this.message;
  35. }
  36. public Response build() {
  37. return null;
  38. }
  39. }

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

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

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

Response文件与对应的包目录。

  1. package javax.ws.rs.core;
  2. import java.lang.annotation.Annotation;
  3. import java.net.URI;
  4. import java.util.Date;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. import java.util.Locale;
  8. import java.util.Map;
  9. import java.util.Set;
  10. public abstract class Response {
  11. protected Response() {
  12. }
  13. public static ResponseBuilder status(Status status) {
  14. return null;
  15. }
  16. public interface StatusType {
  17. }
  18. public enum Status implements Response.StatusType {
  19. BAD_REQUEST,
  20. FORBIDDEN,
  21. NOT_FOUND,
  22. INTERNAL_SERVER_ERROR,
  23. }
  24. }

ResponseBuilder文件与包目录。

  1. package javax.ws.rs.core;
  2. import com.valiantys.software.spreadsheets.rest.model.ErrorModel;
  3. import com.valiantys.software.spreadsheets.service.error.SpreadsheetError;
  4. public class ResponseBuilder {
  5. public SpreadsheetError entity(ErrorModel errorModel) {
  6. return null;
  7. }
  8. }

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

替换与安装

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

原文链接:https://www.cnblogs.com/zhangchen-trunk/p/17688530.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号