使用SheetJs实现在线预览Excel(保留单元格格式信息)

这篇具有很好参考价值的文章主要介绍了使用SheetJs实现在线预览Excel(保留单元格格式信息)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、寻找合适的在线预览Excel的js库

 

我:
在线预览Excel文件有哪些好用的js库
 

 

ChatGPT:
有几个好用的JavaScript库可以用来在网页上实现在线预览Excel文件。以下是一些常见且功能强大的库:
  1. SheetJS (xlsx.js): 这是一个功能强大的库,可以在网页上实现Excel文件的读取、写入和预览。它支持多种Excel格式,包括XLSX、XLS、CSV等。你可以使用SheetJS来读取Excel文件内容,并将其呈现在网页上的HTML表格中。

  2. Handsontable: Handsontable是一个用于创建丰富交互式表格的库,支持Excel样式的编辑和查看功能。它可以将Excel文件内容以表格的形式呈现在网页上,用户可以编辑和查看数据。该库还提供了很多定制和扩展的选项。

  3. DHTMLX Spreadsheet: 这是一个基于JavaScript的电子表格库,支持Excel样式的功能,包括公式、格式化、排序、筛选等。它可以在网页上呈现Excel文件,并提供与电子表格相关的功能。

  4. ExcelJS: ExcelJS是一个用于读取、创建和修改Excel文件的库,可以在网页上进行操作。它支持XLSX格式,允许你生成Excel文件,并支持多种单元格格式。

  5. FlexGrid: Wijmo FlexGrid是一个功能强大的网格控件,支持Excel样式的功能,如排序、筛选、分组等。它可以用于在网页上呈现Excel文件,并提供类似于Excel的交互体验。

这些库中的每一个都有其独特的特点和优势,根据你的需求和项目的要求,你可以选择适合的库来实现在线预览Excel文件功能。

  

二、基础版实现代码
 
<script>
(async() => {
  /* replace with the URL of the file */
  const URL_TO_DOWNLOAD = "https://sheetjs.com/pres.numbers";
  const ab = await (await fetch(URL_TO_DOWNLOAD)).arrayBuffer();

  /* Parse file and get first worksheet */
  const wb = XLSX.read(ab);
  const wsname = wb.SheetNames[0];
  const ws = wb.Sheets[wsname];

  /* Generate HTML */
  var output = document.getElementById("TableContainer");
  output.innerHTML = XLSX.utils.sheet_to_html(ws);
})();
</script>

  

三、增强版实现代码,支持单元格格式等

由于基础实现丢失了很多关键格式信息,比如字体大小、背景色、对齐方式、批注等。于是请教ChatGpt帮忙写代码。下面是ChatGpt写出来的代码,正确与否待验证

<!DOCTYPE html>
<html>
<head>
  <title>Excel Online Preview</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.16.9/xlsx.full.min.js"></script>
  <style>
    /* 根据需要设置单元格样式 */
    .cell {
      padding: 5px;
      border: 1px solid #ccc;
      font-family: Arial, sans-serif;
    }
  </style>
</head>
<body>
  <button id="loadExcelButton">加载Excel</button>
  <div id="excelPreview"></div>

  <script>
    document.getElementById('loadExcelButton').addEventListener('click', function() {
      fetchExcelData();
    });

    function fetchExcelData() {
      fetch('URL_OF_YOUR_BACKEND_API')
        .then(response => response.arrayBuffer())
        .then(data => {
          var workbook = XLSX.read(new Uint8Array(data), { type: 'array' });
          var sheetName = workbook.SheetNames[0];
          var sheet = workbook.Sheets[sheetName];
          var cellData = XLSX.utils.sheet_to_json(sheet, { header: 1 });

          var htmlTable = '<table>';
          for (var row = 0; row < cellData.length; row++) {
            htmlTable += '<tr>';
            for (var col = 0; col < cellData[row].length; col++) {
              var cellValue = cellData[row][col];
              var cellRef = XLSX.utils.encode_cell({ r: row, c: col });
              var cell = sheet[cellRef];
              var cellStyle = cell ? cell.s : {};
              var cellStyleAttr = 'style="' + getCellStyle(cellStyle) + '"';
              var mergeAttr = getMergeAttributes(sheet, row, col);
              var comment = getCellComment(cell);

              var cellHtml = '<td class="cell" ' + cellStyleAttr + ' ' + mergeAttr + '" title="' + comment + '">' + cellValue + '</td>';
              htmlTable += cellHtml;
            }
            htmlTable += '</tr>';
          }
          htmlTable += '</table>';

          document.getElementById('excelPreview').innerHTML = htmlTable;
        })
        .catch(error => {
          console.error('Error fetching Excel data:', error);
        });
    }

    function getCellStyle(cellStyle) {
      var styleAttr = '';
      if (cellStyle.font) {
        var font = cellStyle.font;
        if (font.bold) styleAttr += 'font-weight:bold;';
        if (font.italic) styleAttr += 'font-style:italic;';
        if (font.underline) styleAttr += 'text-decoration:underline;';
        if (font.strike) styleAttr += 'text-decoration:line-through;';
        if (font.color) styleAttr += 'color:' + font.color.rgb + ';';
        if (font.name) styleAttr += 'font-family:' + font.name + ';';
      }
      if (cellStyle.alignment) {
        var alignment = cellStyle.alignment;
        if (alignment.horizontal) styleAttr += 'text-align:' + alignment.horizontal + ';';
        if (alignment.vertical) styleAttr += 'vertical-align:' + alignment.vertical + ';';
      }
      if (cellStyle.fill) {
        var fill = cellStyle.fill;
        if (fill.patternType === 'solid' && fill.fgColor) {
          styleAttr += 'background-color:' + fill.fgColor.rgb + ';';
        }
      }
      return styleAttr;
    }

    function getMergeAttributes(sheet, row, col) {
      var mergeCells = sheet['!merges'] || [];
      for (var i = 0; i < mergeCells.length; i++) {
        var mergeRange = XLSX.utils.decode_range(mergeCells[i]);
        if (row >= mergeRange.s.r && row <= mergeRange.e.r && col >= mergeRange.s.c && col <= mergeRange.e.c) {
          return 'rowspan="' + (mergeRange.e.r - mergeRange.s.r + 1) + '" colspan="' + (mergeRange.e.c - mergeRange.s.c + 1) + '"';
        }
      }
      return '';
    }

    function getCellComment(cell) {
      if (cell && cell.c) {
        var comment = cell.c[0].t;
        return comment;
      }
      return '';
    }
  </script>
</body>
</html>

图片展示

使用SheetJs实现在线预览Excel(保留单元格格式信息)

经过验证,ChatGpt生成的代码总体逻辑是对的,但是很多细节是错的,比如类型对不上,属性缺失等等问题,导致单元格格式并没有完整正确地展示到页面上。比如:对齐信息、颜色信息缺失。合并单元格和批注信息倒是有的。不知道是SheetJs的问题,还是我们不会用SheetJs。如果要展示原始格式,还是用其它插件吧。

 

发现一个代码高亮转成图片的网站:

https://10015.io/tools/code-to-image-converter?utm_source=appinn.com文章来源地址https://www.toymoban.com/news/detail-685694.html

到了这里,关于使用SheetJs实现在线预览Excel(保留单元格格式信息)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java超简单实现文档在线预览功能,支持word\excel\text\pdf\图片等格式转pdf,aspost 转pdf部署linux中文乱码解决方案

    一、背景         在工作中需要对上传到服务器的各种类型包括但不限于word、pdf、excel等文件进行在线预览,前端比较菜搞不定,只能本人亲自上。         网上的经验比较多也比较乱, 有的只有预览,没有文件格式转换,有的也不说linux存在字体问题, 本文会直白的给

    2024年04月10日
    浏览(73)
  • Python实现Excel中的sheet复制(可跨文件操作、可保留原格式)

    使用说明: src_xlsx 源Excel文件 ssheetname 源Excel文件中需要复制的sheet dst_xlsx 目标Excel文件 nsheetname 目标Excel文件中复制后的sheet 注意: 上述函数只能复制内容,不能保留Excel中的格式,例如字体、背景色等。如果有需要保留原格式,请使用下面下一个函数。 代码解析: 该方法

    2024年02月03日
    浏览(34)
  • 文档在线预览(四)将word、txt、ppt、excel、图片转成pdf来实现在线预览

    @ 目录 事前准备 1、需要的maven依赖 添加spire依赖(商用,有免费版,但是存在页数和字数限制,不采用spire方式可不添加) 2、后面用到的工具类代码: 一、word文件转pdf文件(支持doc、docx) 1、使用aspose方式 2、使用poi方式 3、使用spire方式 二、txt文件转pdf文件 三、PPT文件转

    2024年02月08日
    浏览(86)
  • Linux环境Libreoffice实现Word、Excel等在线预览

    目录 转PDF 一、Linux安装libreoffice 二、Java代码实现 这里介绍的是在linux环境(windows环境类似)下实现讲word、Excel、ppt、txt以及png图片转换为PDF文件后实现的预览。由于需要转换为PDF文件, 当Excel表格太大太宽的时候,可能出现换页等格式被破坏的情况。 从官网下载对应版本的

    2024年02月08日
    浏览(48)
  • 【Vue实用功能】Vue实现文档在线预览功能,在线预览PDF、Word、Excel、ppt等office文件

    Luckysheet 是一个类似于 excel 的在线电子表格,功能强大、配置简单且完全开源。 安装 Luckysheet 1、通过CDN引入依赖 由于 Luckysheet 现在还没有发布出模块化的开发,不能使用 npm,所以我们需要在 VUE 项目中手动引入相关文件。编辑 public/index.html 文件,在里面添加如下代码 2、指

    2023年04月22日
    浏览(63)
  • Java 实现word、excel、ppt、txt等办公文件在线预览功能!

    如何用 Java 实现word、excel、ppt、txt等办公文件在线预览功能?本文告诉你答案! java 实现办公文件在线预览功能是一个大家在工作中也许会遇到的需求,网上些公司专门提供这样的服务,不过需要收费。 如果想要免费的,可以用 openoffice,实现原理就是: 通过第三方工具op

    2024年02月11日
    浏览(50)
  • Java实现office办公文档在线预览(word、excel、ppt、txt等)

    文章目录 一、官网下载openOffice 安装包,运行安装(不同系统的安装请自行百度,这里不做过多描述) 二、pom中引入依赖 三、office文件转为pdf流的工具类 四、service层代码  五、controller层代码 office办公文档,如doc、docx、xls、xlsx、ppt、pptx是无法直接在浏览器中打开的,但很

    2024年02月11日
    浏览(46)
  • 使用SheetJS读写Excel文件

    项目中有一个Excel转JSON的工具,之前这个工具一直使用 Python 的 openpyxl 库来编写的,然后使用 pyinstaller 打包成 .exe 文件。之前这个工具只是个命令行工具,不带界面的。现在项目升级,打算使用Web前端方式重写这个工具,调整部分功能并新增图形界面。这篇文章中将使用 S

    2024年02月14日
    浏览(37)
  • vue 实现 word/excel/ppt/pdf 等文件格式预览操作

    第三方服务接口地址:XDOC文档预览服务 特征: 有文件大小限制,超过要收费! 使用方法  参考地址:https://api.gitee.com/zhou_andong/vue-office/ 一、安装插件 vue-office 二、在引用时会涉及版本不兼容的问题 可以在npm包库 ,查看版本:https://www.npmjs.com/ 1、搜索插件名 2、以下版本没

    2024年02月16日
    浏览(69)
  • sheetJS实现把excel导入数据库

            最近在做报表导入数据库的需求,报表文件为excel里面有多个sheet。 使用FileReader异步读取上传的文件。 使用sheet.js进行excel表格内容的解析。 使用bootstrap.js的tab组件对上传的表格进行一个页面预览的展示。         ImportReportForm.asp ImportReport.asp         先选择

    2024年02月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包