Index

概要

这次为大家分享的是,如何用js写出excel文件的预览。

他方便了pc用户和手机端用户可以无需下载,并且直接在线预览excel文件。

因为excel转html的显示用的是第三方开源库的代码,所以实现上有所限制。具体请参见 所用到开源的库 这些库的说明。

支持

不支持

多sheet显示

图片显示

合并后的单元格显示

链接,文字样式等

手机画面优化

效果图

PC:

手机:

示例代码

所用到开源的库

js:

css:

代码

判断是否为excel文件

function checkXls(file) {

let reg = /\.xl(s[xmb]|t[xm]|am|s)$/g;

return reg.test(file);

}

加载模态框,显示加载画面,添加预览图标

function loadModal(fileInfo) {

let previewElement;

jQuery(".file-image-container-gaia").each(function (i, e) {

let fileName = jQuery(e).children("a:eq(0)").text();

if (fileName == fileInfo.name && jQuery(e).children("button").length == 0) {

previewElement = jQuery(e);

return false;

}

});

if (!previewElement) return;

let modalId = 'myModal' + fileInfo.fileKey;

let tabId = 'myTab' + fileInfo.fileKey;

let tabContentId = 'tab-content' + fileInfo.fileKey;

let $button = $('');

let myModal =

'' +

'

' +

'

' +

'

' +

'

' +

'

' + fileInfo.name + '

' +

'' +

'×' +

'' +

'

' +

'

  • ' +

'

' +

'

' +

'

' +

'

' +

'Loading...' +

'

' +

'

' +

'

' +

'

' +

'关闭' +

'

' +

'

' +

'

' +

'

';

previewElement.append($button);

$('body').prepend(myModal);

$('#' + modalId).on('shown.bs.modal', function (e) {

loadRemoteFile(fileInfo);

})

}

下载文件并加载到模态框中

function readWorkbookFromRemoteFile(url, callback) {

let xhr = new XMLHttpRequest();

xhr.open('get', url, true);

xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

xhr.responseType = 'arraybuffer';

xhr.onload = function (e) {

if (xhr.status == 200) {

let data = new Uint8Array(xhr.response)

let workbook = XLSX.read(data, { type: 'array' });

if (callback) callback(workbook);

}

};

xhr.send();

}

function readWorkbook(workbook, fileInfo) {

let sheetNames = workbook.SheetNames;

let navHtml = '';

let tabHtml = '';

let myTabId = 'myTab' + fileInfo.fileKey;

let tabContentId = 'tab-content' + fileInfo.fileKey;

for (let index = 0; index < sheetNames.length; index++) {

let sheetName = sheetNames[index];

let worksheet = workbook.Sheets[sheetName];

let sheetHtml = XLSX.utils.sheet_to_html(worksheet);

let tabid = "tab" + fileInfo.fileKey + "-" + index;

let xlsid = "xlsid" + fileInfo.fileKey + "-" + index;

let active = index == 0 ? "active" : '';

navHtml += '

' + sheetName + '';

tabHtml += '

' +

'

' + sheetHtml + '

';

}

jQuery("#" + myTabId).html(navHtml);

jQuery("#" + tabContentId).html(tabHtml);

jQuery("#" + tabContentId + ' table').addClass("table table-bordered table-hover");

}

function loadRemoteFile(fileInfo) {

let fileUrl = '/k/v1/file.json?fileKey=' + fileInfo.fileKey;

readWorkbookFromRemoteFile(fileUrl, function (workbook) {

readWorkbook(workbook, fileInfo);

});

}

mobile优化

使用"bootstrap-fs-modal.min.css"库,在mobile上打开excel预览图标,会全屏显示excel内容,同时关闭按钮调整在最上端,符合用户使用习惯。

function loadModal(fileInfo) {

let previewElement;

jQuery(".control-showlayout-file-gaia .control-value-gaia div").each(function (index, e) {

let fileName = jQuery(e).find("a:eq(0)").text();

if (fileName == fileInfo.name && jQuery(e).find("button").length == 0) {

previewElement = jQuery(e);

return false;

}

});

if (!previewElement) return;

let modalId = 'myModal' + fileInfo.fileKey;

let tabId = 'myTab' + fileInfo.fileKey;

let tabContentId = 'tab-content' + fileInfo.fileKey;

let $button = $('');

let myModal =

'' +

'

' +

'

' +

'

' +

'

' +

'

' + fileInfo.name + '

' +

'' +

'×' +

'' +

'

' +

'

'+

'

  • ' +

'

' +

'

' +

'

' +

'

' +

'

' +

'Loading...' +

'

' +

'

' +

'

' +

'

' +

'

' +

'

';

previewElement.append($button);

$('body').prepend(myModal);

$('#' + modalId).on('shown.bs.modal', function (e) {

loadRemoteFile(fileInfo);

})

}

和kintone的结合

绑定kintone事件

kintone.events.on('app.record.detail.show', function (event) {

let record = event.record;

for (let index in record) {

let field = record[index];

if (field.type === "FILE") {

let fieldValue = field.value;

fieldValue.forEach(function (file) {

if (checkXls(file.name)) {

loadModal(file);

}

})

}

}

});

做成kintone插件

如果你还不了解插件开发,请先参考 kintone 插件开发流程。

因为本范例没有用到插件的设置画面,所以插件的开发比较简单,只需要设置好manifest.json,然后打包即可

manifest.json

{

"manifest_version": 1,

"version": 1,

"type": "APP",

"homepage_url": {

"zh": "https://cybozudev.kf5.com/hc"

},

"desktop": {

"js": [

"https://js.cybozu.cn/jquery/3.4.1/jquery.min.js",

"https://cdn.jsdelivr.net/npm/bootstrap@4.4.1/dist/js/bootstrap.min.js",

"https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.16.1/xlsx.full.min.js",

"js/excelPreview.js"

],

"css": [

"https://cdn.jsdelivr.net/npm/bootstrap@4.4.1/dist/css/bootstrap.min.css",

"https://js.cybozu.cn/font-awesome/v4.7.0/css/font-awesome.min.css"

]

},

"icon": "image/excelPreview.png",

"name": {

"en": "excelPreview",

"ja": "excelPreview",

"zh": "excelPreview"

},

"description": {

"en": "Excel Preview",

"ja": "Excel Preview",

"zh": "Excel Preview"

},

"mobile": {

"js": [

"https://js.cybozu.cn/jquery/3.4.1/jquery.min.js",

"https://cdn.jsdelivr.net/npm/bootstrap@4.4.1/dist/js/bootstrap.min.js",

"https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.16.1/xlsx.full.min.js",

"js/excelPreviewMobile.js"

],

"css": [

"https://cdn.jsdelivr.net/npm/bootstrap@4.4.1/dist/css/bootstrap.min.css",

"https://js.cybozu.cn/font-awesome/v4.7.0/css/font-awesome.min.css",

"css/bootstrap-fs-modal.min.css"

]

}

}

使用

安装后,只有excel的文件后面会有预览标识,其他文件不会出现预览图标。

代码下载

注意事项

本示例代码不保证其运行。

我们不为本示例代码提供技术支持。

h5页面如何预览excel文件_kintone excel预览插件相关推荐

  1. Vue读取Excel文件转换为Html预览,打印

    Vue读取网络路径Excel文件转换为Html预览,打印 前言 一.预览EXCEL文件 1.获取网络路径Excel文件 2.转换格式后的数据 3.最终结果 二.打印文件 前言 我们需要对一些Excel ...

  2. 关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法...

    -----转载:http://blog.csdn.net/sgear/article/details/7663502 关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格 ...

  3. freemaker导出excel文件使用Excel打不开

    freemaker导出excel文件使用Excel打不开 最近在做导出的功能过程中,发现导出的excel只能用wps打开,用office打开就报文件损坏 网上搜了一些文章,找到了解决方案 只要把ss: ...

  4. XX健康:预约管理-预约设置日历插件文件简单下载Excel文件解析Excel表数据批量导入

    1. 需求分析 前面我们已经完成了检查项管理.检查组管理.套餐管理等.接下来我们需要进行预约设置,其实就是设置每一天的体检预约最大数量.客户可以通过微信端在线预约,在线预约时需要选择体检的时间,如果客 ...

  5. python合并excel文件关键字_使用 Python 合并多个格式一致的 Excel 文件,Excel 表格...

    一 问题描述 最近朋友在工作中遇到这样一个问题,她每天都要处理如下一批 Excel 表格:每个表格的都只有一个 sheet,表格的前两行为表格标题及表头,表格的最后一行是相关人员签字.最终目标是将每个 ...

  6. oracle 数据 导出 excel 自动分多个文件,从oracle数据库中导出大量数据到excel中为什么自动分成了好几个excel文件《excel表格新手入门》...

    EXCEL中一个单元格中多行文本如何导入或复制到SQL SERVER 数据库表中? 保留换行符保存进数据表啊,读取出来显示的时候根据需要进行转换就行了,比如要在网页上显示,可以把换行符转换成HTML的 ...

  7. oracle数据库表excel文件位置,Excel数据导入到oracle数据库表方法

    最近工作中碰到excel文件数据导入oracle数据库表中的技术问题.以前未处理过,决定利用这次机会,好好研究研究. 可先建一临时表,字段和要导入的Excel表的列一致 运行以下SQL语句,使临时表可 ...

  8. java文件无法导出excel文件,【excel表格文件格式无效】java导出excel,excel打不开,报文件格式无效,怎么解决!...

    excel提示 打开的文件.xls的格式与文件扩展名不一致怎么办 如果打开文件的格式与文件的扩展名不一致,只要能够打开就不用去管他. java导出excel,excel打不开,报文件格式无效,怎么解决 ...

  9. python怎么打开excel文件并处理_Python利用openpyxl处理Excel文件(Excel文件基本操作)...

    上一篇,我们简要介绍了openpyxl及其安装过程,这一篇我们学习使用openpyxl处理Excel的具体过程,力争涵盖大多数官方文档中相关内容,对这一知识点进行简单的汇总. 一.学习目标 (一)op ...

最新文章

  1. 假设检验怎么做?这次把方法+Python代码一并教给你
  2. 泛型委托 Predicate/Func/Action
  3. Expected a key while parsing a block mapping. assets: ^
  4. 虚拟机管理解决方案-VMware篇
  5. 理发店收银系统php,【毕业论文】基于php+mysql美发店收银系统设计与实现.doc
  6. 又翻车?苹果被揪出夸大iPhone续航时间:iPhone XR虚标51%
  7. AIOps智能化数据体系的构建及在字节跳动的实践
  8. hihocoder 1449 : 后缀自动机三·重复旋律6(后缀自动机)
  9. TypeError: cannot unpack non-iterable int object查找指定文件夹下指定文件类型的数量
  10. 汇编语言:将ASCⅡ码表示的十进制数转换为二进制数/十六进制数
  11. 嵌入式开发-Telink芯片-入门介绍
  12. Choerodon猪齿鱼实践之集群管理(一)
  13. 将7z分卷合并成一个7z文件,然后就可以使用7z或rar软件等打开
  14. 华为nova7se怎么看云相册_华为nova7SE拍照怎么样?华为nova7SE夜拍照效果如何
  15. 淘宝中所说的sku是什么
  16. (论文阅读笔记)OLE:正交低秩嵌入,即插即用的几何损失
  17. 在win7命令行下编译运行C++程序
  18. openEuler | 树莓派安装openEuler-Raspi
  19. 算法-关于地点名词提取(C/C++/JAVA/C#)-build20220403
  20. pacman常用命令汇总

热门文章

  1. 计算机科学导论-绪论
  2. 大数据开发和大数据分析的区别?
  3. 点量云流化具有哪些特色
  4. 清理win10不常用服务
  5. 使用单视点模型进行水下标定的分析
  6. twitter推文案例
  7. python字典统计单词个数_python字典统计单词个数
  8. 【34期】谈谈为什么要拆分数据库?有哪些方法?
  9. 计算机网络学习笔记(持续更新)
  10. 那些年用过的时间衰减函数