首页 > 其他分享 >XLSX.utils.decode_range 使用,选定表格范围

XLSX.utils.decode_range 使用,选定表格范围

时间:2024-08-06 21:56:51浏览次数:11  
标签:XLSX utils 边框 decode range A6 范围

表格选定范围设置边框

当需要设置特定范围(如 A6 到 E19)的边框时,可以使用 XLSX.utils.decode_rangeXLSX.utils.encode_cell 方法来处理。以下是如何使用 decode_range 解析范围并设置边框样式的示例:

import XLSX from 'xlsx-js-style';

const workbook = XLSX.utils.book_new();
const worksheetData = [
  ['Name', 'Age', 'Gender'],
  ['John Doe', 29, 'Male'],
  ['Jane Smith', 32, 'Female']
];

const worksheet = XLSX.utils.aoa_to_sheet(worksheetData);

// 定义范围 A6 到 E19
const range = XLSX.utils.decode_range('A6:E19');

for (let R = range.s.r; R <= range.e.r; ++R) {
  for (let C = range.s.c; C <= range.e.c; ++C) {
    const cellAddress = XLSX.utils.encode_cell({ r: R, c: C });
    if (!worksheet[cellAddress]) {
      worksheet[cellAddress] = {};
    }
    // 设置边框样式
    worksheet[cellAddress].s = {
      border: {
        top: { style: 'thin', color: { rgb: '000000' } },
        bottom: { style: 'thin', color: { rgb: '000000' } },
        left: { style: 'thin', color: { rgb: '000000' } },
        right: { style: 'thin', color: { rgb: '000000' } }
      }
    };
  }
}

XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
XLSX.writeFile(workbook, 'styled_sheet.xlsx');

在这个示例中:

  • 使用 XLSX.utils.decode_range('A6:E19') 解析范围,并获取范围对象。
  • 使用范围对象 range.srange.e 来确定起始和结束的行列索引。
  • 使用嵌套的循环遍历范围内的每个单元格,并为每个单元格设置边框样式。
  • 确保边框样式的设置适合你的需求,可以根据需要调整边框的粗细、颜色等属性。

通过这种方式,你可以直接使用范围字符串来解析并设置边框样式,更加简洁和直观地处理特定范围内的单元格。

range.s

xlsx-js-style 中,range.s.r 是范围对象(Range)中的一个属性,表示范围的起始行索引(row index)。具体来说:

  • range 是通过 XLSX.utils.decode_range 方法解析得到的范围对象。
  • range.s 表示范围的起始位置,是一个包含 r(行索引)和 c(列索引)属性的对象。

例如,如果使用 XLSX.utils.decode_range('A6:E19') 解析范围字符串 'A6:E19',将得到一个范围对象,其属性如下:

  • range.s.r 表示起始行索引,对应于 A6 单元格的行索引,即 5
  • range.s.c 表示起始列索引,对应于 A6 单元格的列索引,即 0

因此,range.s.r 在上述示例中用于确定要处理的范围内的起始行。通过 range.s.rrange.e.r(结束行索引)可以确定需要设置边框样式的行范围,从而在特定范围内的每个单元格应用边框样式。

范围外围设置边框

如果你想要在一个特定范围(如 A6 到 E19)的表格中只设置最外围的边框而不设置内部区域的边框,可以通过以下方式实现:

import XLSX from 'xlsx-js-style';

const workbook = XLSX.utils.book_new();
const worksheetData = [
  ['Name', 'Age', 'Gender'],
  ['John Doe', 29, 'Male'],
  ['Jane Smith', 32, 'Female']
];

const worksheet = XLSX.utils.aoa_to_sheet(worksheetData);

// 定义范围 A6 到 E19
const range = XLSX.utils.decode_range('A6:E19');

// 设置最外围的边框
for (let R = range.s.r; R <= range.e.r; ++R) {
  for (let C = range.s.c; C <= range.e.c; ++C) {
    const cellAddress = XLSX.utils.encode_cell({ r: R, c: C });
    if (!worksheet[cellAddress]) {
      worksheet[cellAddress] = {};
    }
    if (R === range.s.r || R === range.e.r || C === range.s.c || C === range.e.c) {
      // 设置最外围的边框
      worksheet[cellAddress].s = {
        border: {
          top: { style: 'thin', color: { rgb: '000000' } },
          bottom: { style: 'thin', color: { rgb: '000000' } },
          left: { style: 'thin', color: { rgb: '000000' } },
          right: { style: 'thin', color: { rgb: '000000' } }
        }
      };
    }
  }
}

XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
XLSX.writeFile(workbook, 'styled_sheet.xlsx');

在这个示例中,我们依然使用 XLSX.utils.decode_range('A6:E19') 解析范围,然后使用两层循环遍历范围内的每个单元格。在设置单元格样式时,通过判断当前单元格是否位于范围的最外围(即起始行、结束行、起始列、结束列),来决定是否设置边框样式。

  • R === range.s.r:当前行为范围的起始行。
  • R === range.e.r:当前行为范围的结束行。
  • C === range.s.c:当前列为范围的起始列。
  • C === range.e.c:当前列为范围的结束列。

只有满足以上条件的单元格才会被设置最外围的边框样式,从而实现在指定范围内只设置最外围的边框而不设置内部区域的边框。

标签:XLSX,utils,边框,decode,range,A6,范围
From: https://www.cnblogs.com/jocongmin/p/18346055

相关文章

  • xlsx-js-style 如何配置表格样式
    xlsx-js-style是一个用于处理Excel文件的JavaScript库,基于xlsx库并添加了对样式的支持。通过xlsx-js-style,你可以设置单元格的字体、背景、边框等样式。下面是如何使用xlsx-js-style库配置表格样式的步骤。1.安装库首先,确保你已经安装了xlsx-js-style库:npminstal......
  • Netty技术全解析:ByteToMessageDecoder类深度解析
    ❃博主首页:「码到三十五」,同名公众号:「码到三十五」,wx号:「liwu0213」☠博主专栏:<mysql高手><elasticsearch高手><源码解读><java核心><面试攻关>♝博主的话:搬的每块砖,皆为峰峦之基;公众号搜索「码到三十五」关注这个爱发技术干货的coder,......
  • const objectUtil = require('../../utils/object'); const toolUtil = require('../.
    //模态框functionshowModal(title,content,confirm,cancel){wx.showModal({title:title,content:content,showCancel:true,success(res){if(res.confirm){confirm(confirm)}elseif(res.canc......
  • 找不到 Keras.utils.layer_utils
    如何解决该错误:"Nomodulecalledlayer_utils"当我尝试从Keras或Tensorflow安装或导入它时,我收到一条错误消息,指出它不存在。我正在按照一个教程安装来自需求的各种依赖项.txt文件,但可能缺少一些内容。keras.utils.layer_utils在较新版本的Keras中......
  • torch.utils.data.Dataset 和 torch.utils.data.DataLoader
    torch.utils.data是PyTorch中用于数据加载和预处理的模块。通常结合使用其中的Dataset和DataLoader两个类来加载和处理数据。Datasettorch.utils.data.Dataset是一个抽象类,用于表示数据集。需要用户自己实现两个方法:__len__和__getitem__。__len__方法返回数据集的大小,__getit......
  • 排序工具类 - SortUtils
    packagecom.kurumi.util;importorg.springframework.stereotype.Component;importjava.util.Collections;importjava.util.Comparator;importjava.util.List;importjava.util.Map;publicclassSortUtils{/***将list安装sortMap中的传参排......
  • OAF export data from VO in xlsx format
    InthisarticlewearegoingtoseehowtoexportviewobjectinMicrosoftofficeexcelxlsxformatToexportwithxlsxformatfewbasicthingsneededareJarfiles(Listofjari'veusedisshowninbelowscreenshot)ForbetterunderstandingI’lli......
  • 使用 Python 读取 .xlsx 文件的最快方法
    我正在尝试使用Python将.xlsx文件中的数据读入MySQL数据库。这是我的代码:wb=openpyxl.load_workbook(filename="file",read_only=True)ws=wb['MyWorksheet']conn=MySQLdb.connect()cursor=conn.cursor()cursor.execute("SETautocommit=0"......
  • Vue3 - 最新详细实现网站内部打开预览 office 全套附件,在页面弹窗内解析预览 word文档
    前言如果您需要Vue2版本,请访问这篇文章。在vue3|nuxt3项目开发中,详解实现项目内部“打开解析预览各种office文档”通用预览插件,支持弹出一个窗口在弹框内预览或者直接显示在页面某个div容器里面,解析预览word文档、excel电子表格、ppt演示文稿、pdf文档、txt文......
  • Vue2 - 最新详细实现网站内部打开预览 office 全套附件,在页面弹窗内解析预览 word文档
    前言如果您需要Vue3版本,请访问在vue2|nuxt2项目开发中,详解实现项目内部“打开解析预览各种office文档”通用预览插件,解析预览word文档、excel电子表格、ppt演示文稿、pdf文档、txt文本等,支持弹出一个窗口在弹框内预览或者直接显示在页面某个div容器里面,让vue项......