我正在try 从Excel工作表的指定范围生成一个HTML表,但不是使用sheetJS

SheetJS有函数XLSX.utils.sheet_to_html(ws, opts),它可以将表格转换为HTML,并维护合并的单元格等,这很好,但不确定如何限制转换的范围.例如,我有一个包含两个区域的工作表:

  • A1:C5
  • E6:G10

我想从E6:G10中的值创建一个HTML表,并忽略A1:C5.E6和E7被合并.我是否需要先将E6:G10区域移动到新的工作表中,然后使用sheet_to_html()来创建HTML表?如果是这样,除非有内置的方法,否则最好的方法是什么?

推荐答案

灵感来自Moshen Robatjazi的 comments .

SheetJS不提供将特定范围的单元格转换为HTML的内置方法.但是,您可以通过创建一个仅具有所需范围的新工作表,然后将该工作表转换为HTML来实现这一点.以下是如何做到这一点的逐步指南:

  1. 阅读练习册:
var workbook = XLSX.readFile('yourfile.xlsx');
  1. 获取工作表:
var worksheet = workbook.Sheets[workbook.SheetNames[0]];
  1. 获取要转换为HTML的单元格范围:
var range = XLSX.utils.decode_range("E6:G10");
  1. 创建新工作表:
var new_worksheet = {};
  1. 将所需范围从原始工作表复制到新工作表:
for(var R = range.s.r; R <= range.e.r; ++R) {
  for(var C = range.s.c; C <= range.e.c; ++C) {
    /* Find the cell object in the original worksheet */
    var cell = worksheet[XLSX.utils.encode_cell({r:R, c:C})];
    /* Copy the cell from the original worksheet to the new worksheet */
    new_worksheet[XLSX.utils.encode_cell({r:R-range.s.r, c:C-range.s.c})] = cell;
  }
}
  1. 设置新工作表的范围:
new_worksheet['!ref'] = XLSX.utils.encode_range({s:{r:0, c:0}, e:{r:range.e.r-range.s.r, c:range.e.c-range.s.c}});
  1. 将新工作表转换为HTML:
var html_str = XLSX.utils.sheet_to_html(new_worksheet);

这将为您提供所需范围的HTML字符串.请注意,这将不会维护合并的单元格.如果要保留合并的单元格,则需要将"!Merges"数组从原始工作表复制到新工作表中,并相应地调整区域.

如果您想在范围内添加对合并单元格的支持,则相对简单.

要维护合并的单元格,您需要将"!Merges"数组从原始工作表复制到新工作表中,并相应地调整范围.以下是你如何做到这一点:

  1. 从原始工作表中获取合并:
var merges = worksheet['!merges'];
  1. 为新工作表创建新的合并数组:
var new_merges = [];
  1. 将合并从原始工作表复制到新工作表,调整范围:
for(var i = 0; i < merges.length; ++i) {
  var merge = merges[i];
  /* Check if the merge is within the desired range */
  if(merge.s.r >= range.s.r && merge.e.r <= range.e.r && merge.s.c >= range.s.c && merge.e.c <= range.e.c) {
    /* Adjust the range and add to the new merges array */
    new_merges.push({
      s: {r: merge.s.r - range.s.r, c: merge.s.c - range.s.c},
      e: {r: merge.e.r - range.s.r, c: merge.e.c - range.s.c}
    });
  }
}
  1. 设置新工作表的合并:
new_worksheet['!merges'] = new_merges;

现在,当您将新工作表转换为HTML时,合并的单元格应该保持不变.请注意,这将仅保持完全在所需范围内的合并.如果合并的开始或结束超出所需范围,则不会包括该合并.这应该在第一组指令中的步骤7之前完成.

Javascript相关问答推荐

如何访问react路由v6加载器函数中的查询参数/搜索参数

是什么原因导致此Angular 16电影应用程序中因类型错误而不存在属性?

有什么(最佳)方法可以从模块中获取脚本模块的多姆元素吗?

如何在使用fast-xml-parser构建ML时包括属性值?

vscode扩展-webView Panel按钮不起任何作用

react—router v6:路由没有路径

在react js中使用react—router—dom中的Link组件,分配的右侧不能被 destruct ''

当点击注册页面上的注册按钮时,邮箱重复

如何避免页面第一次加载时由于CSS样式通过JavaScript更改而出现闪烁

如何使用子字符串在数组中搜索重复项

在执行异步导入之前判断模块是否已导入()

我可以使用空手道用户界面来获取网页的当前滚动位置吗?

React.Development.js和未捕获的ReferenceError:未定义useState

禁用.js文件扩展名并从目录导入隐式根index.js时,找不到NodeJS导入模块

以编程方式聚焦的链接将被聚焦,但样式不适用

为什么可选参数的顺序会导致问题?

为什么在函数中添加粒子的速率大于删除粒子的速率?

有角粘桌盒阴影

在HTML中使用meta标记来指定定制元数据以用于使用JavaScript进行检索是不是一个坏主意?

如何格式化API的响应