成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

vue-electron中修改表格內容并修改樣式

瀏覽:220日期:2022-06-09 15:59:09
目錄
  • 需求
  • 技術
  • xlsx-style
  • 全部代碼

需求

將表格導入并向其添加內容,然后導出表格,且表格樣式(一般是值寬高合并顏色等)不能改變。

技術

  • electron
  • xlsx
  • xlsx-style
  • node-xlsx
yarn add xlsx
yarn add xlsx-style
yarn add node-xlsx

xlsx-style

xlsx-style 的一些源碼修改是根據網上一些博主的文章來的。如下所示:

使用xlsx-style 的時候要注意,使用的是會報錯誤,所以,我們需要改他的源碼,下面是正確的修改方式,代碼如下(示例)

# 第一步 修改nod_modules 里面xlsx-style文件夾下面dist文件夾下的cpexcel.js文件
807: var cpt = cptable;
# 第二步 修改xlsx-style文件夾下面ods.js文件
10: return require("./" + "xlsx").utils;
12: try { return require("./" + "xlsx").utils; }
# 第三步 修改xlsx-style文件夾下面的xlsx.js文件 替換write_ws_xml_data以下方法
var DEF_PPI = 96, PPI = DEF_PPI;
function px2pt(px) { return px * 96 / PPI; }
function pt2px(pt) { return pt * PPI / 96; }
function write_ws_xml_data(ws, opts, idx, wb) {
?var o = [], r = [], range = safe_decode_range(ws["!ref"]), cell, ref, rr = "", cols = [], R, C,rows = ws["!rows"];
?for(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);
?for(R = range.s.r; R <= range.e.r; ++R) {
? ?r = [];
? ?rr = encode_row(R);
? ?for(C = range.s.c; C <= range.e.c; ++C) {
? ? ?ref = cols[C] + rr;
? ? ?if(ws[ref] === undefined) continue;
? ? ?if((cell = write_ws_xml_cell(ws[ref], ref, ws, opts, idx, wb)) != null) r.push(cell);
? ?}
? ?if(r.length > 0){
? params = ({r:rr});
? if(rows && rows[R]) {
? ?row = rows[R];
? ?if(row.hidden) params.hidden = 1;
? ?height = -1;
? ?if (row.hpx) height = px2pt(row.hpx);
? ?else if (row.hpt) height = row.hpt;
? ?if (height > -1) { params.ht = height; params.customHeight = 1; }
? ?if (row.level) { params.outlineLevel = row.level; }
? }
? o[o.length] = (writextag("row", r.join(""), params));
?}
?}
if(rows) for(; R < rows.length; ++R) {
?if(rows && rows[R]) {
? params = ({r:R+1});
? row = rows[R];
? if(row.hidden) params.hidden = 1;
? height = -1;
? if (row.hpx) height = px2pt(row.hpx);
? else if (row.hpt) height = row.hpt;
? if (height > -1) { params.ht = height; params.customHeight = 1; }
? if (row.level) { params.outlineLevel = row.level; }
? o[o.length] = (writextag("row", "", params));
?}
}
?return o.join("");
}

全部代碼

upload方法分析

通過pdfWord.testImage()讀取到表格(node環境),然對list數據里面的表格進行內容的修改以及填充,修改內容以后就將其樣式調整以及轉換數據類型并下載

testImage() {
? ? const a2 = path.join("C:\\Users\\op\\Desktop", "副本.xlsx")
? ? const sheets = xlsx.parse(a2);
? ? //讀取xlxs的sheet1?
? ? const sheetData = sheets[0].data;
? ? return sheets[0].data;
? },
  • openDownloadDialog 下載
  • sheet2blob 將樣式修改后的表格轉為blob格式
  • xlsxAddStyle 修改樣式

其他的屬性大家可以看文檔即可看明白,我只能大家說一下三個自認為比較重要的東西

1."!cols"(代碼中:sheet["!cols"])= 指每列單元格一列的寬度,按先后順序排列
2."!rows"(代碼中:sheet["!rows"])= 指每行單元的一行的高度,按先后順序排列
3."!merges"(代碼中:sheet["!merges"])= 指合并;沒有先后順序。s:開始 e:結束 r:列 c:行

以上三種都是可以讓用戶自己控制的屬性,至于其他的就需要你們根據自己的需求進行調整了

在修改樣式中我們會看到element一個變量;他們可以去打印這個變量查看其中的屬性;你們可以到時里面有許多樣式結構,你只需要根據自己想要的去修改即可。

<template>
? <div>
? ? <el-button type="primary" @click="upload">主要按鈕</el-button>
? </div>
</template>
<script>
import XLSXStyle from "xlsx-style";
import * as XLSX from "xlsx";
import pdfWord from "@/utils/tool/pdf-word";
export default {
? name: "duplication",
? components: {},
? props: {},
? data() {
? ? return {
? ? };
? },
? created() {},
? methods: {
? ? upload() {
? ? ? let list = pdfWord.testImage();
? ? ? console.log(list);
? ? ? for (let i = 0; i < list.length - 1; i++) {
? ? ? ? // console.log("op",list[i]);
? ? ? ? if (i == 5) {
? ? ? ? ? list[i] = [3, "愛情", "xx", "ssd", "wdsda"];
? ? ? ? }
? ? ? }
? ? ? const sheet = this.xlsxAddStyle(list);
? ? ? this.openDownloadDialog(this.sheet2blob(sheet), `1.xlsx`);
? ? ? return;
? ? },
? ? // 下載
? ? openDownloadDialog(url, saveName) {
? ? ? var urlA;
? ? ? if (typeof url === "object" && url instanceof Blob) {
? ? ? ? urlA = URL.createObjectURL(url); // 創建blob地址
? ? ? }
? ? ? const aLink = document.createElement("a");
? ? ? aLink.href = urlA;
? ? ? ?// 2.直接使用自定義文件名,設置下載文件名稱
? ? ? aLink.setAttribute("download", saveName )
? ? ? document.body.appendChild(aLink)
? ? ? // 模擬點擊下載
? ? ? aLink.click()
? ? ? // 移除改下載標簽
? ? ? document.body.removeChild(aLink);
? ? },
? ? // 轉為blob文件
? ? sheet2blob(sheet, sheetName) {
? ? ? var sheetNameS = sheetName || "sheet1";
? ? ? var workbook = {
? ? ? ? SheetNames: [sheetNameS],
? ? ? ? Sheets: {},
? ? ? };
? ? ? workbook.Sheets[sheetNameS] = sheet;
? ? ? // 生成excel的配置項
? ? ? var wopts = {
? ? ? ? bookType: "xlsx", // 要生成的文件類型
? ? ? ? bookSST: false, // 是否生成Shared String Table,官方解釋是,如果開啟生成速度會下降,但在低版本IOS設備上有更好的兼容性
? ? ? ? type: "binary",
? ? ? };
? ? ? var wbout = XLSXStyle.write(workbook, wopts);
? ? ? // XLSXStyle.write(wb, { bookType: bookType, bookSST: false, type: "binary" });
? ? ? var blob = new Blob([s2ab(wbout)], { type: "application/octet-stream" });
? ? ? // 字符串轉ArrayBuffer
? ? ? function s2ab(s) {
? ? ? ? var buf = new ArrayBuffer(s.length);
? ? ? ? var view = new Uint8Array(buf);
? ? ? ? for (var i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
? ? ? ? return buf;
? ? ? };
? ? ? return blob;
? ? },
? ? // 修改樣式
? ? xlsxAddStyle(xlsx) {
? ? ? const sheet = XLSX.utils.aoa_to_sheet(xlsx);
? ? ? // 單元格外側有框線
? ? ? const borderAll = {
? ? ? ? top: { style: "thin" },
? ? ? ? bottom: { style: "thin" },
? ? ? ? left: { style: "thin" },
? ? ? ? right: { style: "thin" },
? ? ? };
? ? ? // 單元格外側無框線
? ? ? const noBorder = {
? ? ? ? top: { style: "thin" },
? ? ? ? bottom: { style: "thin" },
? ? ? ? left: { style: "thin" },
? ? ? ? right: { style: "thin" },
? ? ? };
? ? ? for (const key in sheet) {
? ? ? ? if (Object.hasOwnProperty.call(sheet, key)) {
? ? ? ? ? const element = sheet[key];
? ? ? ? ? if (typeof element === "object") {
? ? ? ? ? ? const index = Number(key.slice(1)) - 1;
? ? ? ? ? ? let alignment = {
? ? ? ? ? ? ? horizontal: "center", // 所有單元格右對齊
? ? ? ? ? ? ? vertical: "center", // 所有單元格垂直居中
? ? ? ? ? ? ? wrapText: true, //自動換行 需申報物品
? ? ? ? ? ? };
? ? ? ? ? ? element.s = {
? ? ? ? ? ? ? alignment: alignment,
? ? ? ? ? ? ? font: {
? ? ? ? ? ? ? ? name: "宋體",
? ? ? ? ? ? ? ? sz: 12,
? ? ? ? ? ? ? ? italic: false,
? ? ? ? ? ? ? ? underline: false,
? ? ? ? ? ? ? },
? ? ? ? ? ? ? border: borderAll,
? ? ? ? ? ? ? fill: {
? ? ? ? ? ? ? ? fgColor: { rgb: "FFFFFFFF" },
? ? ? ? ? ? ? },
? ? ? ? ? ? };
? ? ? ? ? ? if (index === 0) {
? ? ? ? ? ? ? element.s.font.bold = true; // 加粗
? ? ? ? ? ? }
? ? ? ? ? ? // 標題的樣式
? ? ? ? ? ? if (index === 2) {
? ? ? ? ? ? ? // element.s.font.bold = true; // 加粗
? ? ? ? ? ? ? // element.s.fill.fgColor = { rgb: "FFCCFFFF" };
? ? ? ? ? ? }
? ? ? ? ? }
? ? ? ? }
? ? ? }
? ? ? // 表頭的樣式設置
? ? ? sheet["A1"].s.alignment.horizontal = "center";
? ? ? sheet["A1"].s.font.underline = false;
? ? ? sheet["A1"].s.font.sz = 18;
? ? ? sheet["A1"].s.border = noBorder;
? ? ? // 單元格的列寬
? ? ? sheet["!cols"] = [
? ? ? ? { wpx: 37 },
? ? ? ? { wpx: 87 },
? ? ? ? { wpx: 45 },
? ? ? ? { wpx: 69 },
? ? ? ? { wpx: 176 },
? ? ? ? { wpx: 71 },
? ? ? ? { wpx: 53 },
? ? ? ? { wpx: 73 },
? ? ? ? { wpx: 51 },
? ? ? ];
? ? ? sheet["!rows"] = [
? ? ? ? { hpx: 47 },
? ? ? ? { hpx: 63 },
? ? ? ? { hpx: 48 },
? ? ? ? { hpx: 24 },
? ? ? ? { hpx: 24 },
? ? ? ? { hpx: 24 },
? ? ? ? { hpx: 24 },
? ? ? ? { hpx: 24 },
? ? ? ? { hpx: 24 },
? ? ? ? { hpx: 24 },
? ? ? ? { hpx: 24 },
? ? ? ? { hpx: 24 },
? ? ? ? { hpx: 24 },
? ? ? ? { hpx: 24 },
? ? ? ? { hpx: 24 },
? ? ? ? { hpx: 24 },
? ? ? ? { hpx: 24 },
? ? ? ? { hpx: 24 },
? ? ? ? { hpx: 50 }, // 19行 - 實際 18(索引)
? ? ? ? { hpx: 34 },
? ? ? ? { hpx: 46 },
? ? ? ? { hpx: 87 },
? ? ? ];
? ? ? // r:列 c:行 s:開始 e:結束
? ? ? sheet["!merges"] = [
? ? ? ? { e: { c: 7, r: 0 }, s: { c: 0, r: 0 } },
? ? ? ? { e: { c: 7, r: 1 }, s: { c: 0, r: 1 } },
? ? ? ? { e: { c: 7, r: 18 }, s: { c: 0, r: 18 } },
? ? ? ? { e: { c: 7, r: 19 }, s: { c: 0, r: 19 } },
? ? ? ? { e: { c: 7, r: 20 }, s: { c: 0, r: 20 } },
? ? ? ? { e: { c: 7, r: 21 }, s: { c: 0, r: 21 } },
? ? ? ? { e: { c: 8, r: 1 }, s: { c: 8, r: 17 } },
? ? ? ];
? ? ? return sheet;
? ? },
? },
? computed: {},
? watch: {},
? mounted() {},
};
</script>
<style scoped lang="less">
</style>

到此這篇關于vue-electron中修改表格內容并修改樣式的文章就介紹到這了,更多相關vue-electron修改表格樣式內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: JavaScript
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产偷国产偷亚洲高清人白洁| 一本色道久久99精品综合| 东方欧美亚洲色图在线| 玖玖国产精品视频| 国产色91在线| 从欧美一区二区三区| 亚洲人成久久| 欧美高清dvd| 亚洲成人在线观看视频| 一区二区视频欧美| 日韩片之四级片| 麻豆国产一区二区| 色播五月激情综合网| 亚洲美女视频一区| 黄色成人91| 国产精品久线观看视频| 精品亚洲国内自在自线福利| 国产精品国产精品| 91精品一区二区三区在线观看| 久久久精品综合| 亚洲成人免费在线观看| 影音先锋久久久| 国产精品免费视频网站| 91麻豆精品在线观看| 国产亚洲精品7777| av在线不卡免费看| 91久久精品一区二区| 亚洲欧洲韩国日本视频| 激情久久一区| 亚洲美女视频一区| 国产精品一页| 五月天丁香久久| 欧美三级蜜桃2在线观看| 精品一区二区三区日韩| 91精品国产一区二区三区蜜臀 | 亚洲国产一区二区三区a毛片| 日韩免费高清av| 成人黄色网址在线观看| 国产亚洲欧美一区在线观看| 99久久国产综合精品麻豆| 亚洲国产精品99久久久久久久久 | 欧美系列日韩一区| 国产在线不卡一卡二卡三卡四卡| 99视频+国产日韩欧美| 亚洲一区二区三区国产| 色久综合一二码| 国产自产2019最新不卡| 91精品国产一区二区三区蜜臀| 蜜臀精品久久久久久蜜臀| 欧美曰成人黄网| 国产又粗又猛又爽又黄91精品| 久久亚洲免费| 另类综合日韩欧美亚洲| 色婷婷精品久久二区二区蜜臂av| 国产成人亚洲综合色影视| 久久综合久久综合九色| 国语精品一区| 国产精品天天看| 亚洲黄色精品| 视频一区二区欧美| 在线综合+亚洲+欧美中文字幕| 开心九九激情九九欧美日韩精美视频电影 | 久久久久国产精品一区二区| 狠狠色狠狠色综合系列| www国产成人免费观看视频 深夜成人网| 国内不卡的二区三区中文字幕| 欧美三级韩国三级日本三斤| 日韩精品欧美精品| 色94色欧美sute亚洲线路一久| 亚洲国产欧美日韩另类综合| 91黄色免费看| 成人手机在线视频| 最新欧美精品一区二区三区| 色呦呦日韩精品| www..com久久爱| 亚洲人成7777| 欧美精品一卡两卡| 国产成人激情av| 国产女人18毛片水真多成人如厕| 欧美国产另类| 亚洲国产日韩综合久久精品| 欧美美女黄视频| 欧美久久99| 性做久久久久久免费观看| 欧美日韩免费在线视频| 欧美影院一区| 五月婷婷激情综合| 欧美成人福利视频| 中文精品在线| 国产乱码精品一区二区三区av | 欧美精品日韩一本| 91蝌蚪porny成人天涯| 午夜精品久久一牛影视| 日韩精品一区二区三区在线播放| 国产成人在线视频免费播放| 中文字幕一区二区三区精华液| 亚洲激情二区| 久久99久久久久| 久久久久国产免费免费| 亚洲一区二区在| 成人福利在线看| 亚洲国产一区二区在线播放| 色欧美乱欧美15图片| 欧美尤物一区| 久久不见久久见免费视频1| 国产精品人成在线观看免费 | 精品久久五月天| 国产美女一区| 99久久久国产精品免费蜜臀| 天涯成人国产亚洲精品一区av| 欧美在线观看18| 欧美日韩国产免费观看| 日韩电影在线看| 在线成人高清不卡| 一本一本久久a久久精品综合妖精| 婷婷六月综合亚洲| 欧美精品一区二区久久婷婷 | 久久久99爱| 欧美久久一级| 久久精品噜噜噜成人88aⅴ| 久久久精品免费观看| 久久久久久亚洲精品杨幂换脸| 日韩电影在线一区二区| 久久尤物电影视频在线观看| 久久成人资源| 91丝袜国产在线播放| 日韩经典一区二区| 国产日韩欧美综合在线| 欧美三级韩国三级日本三斤| 激情文学综合插| 国产精品久久久久久久蜜臀| 亚洲经典一区| 国产永久精品大片wwwapp| 亚洲欧洲综合另类在线| 色av综合在线| 国产精品xvideos88| 日韩av一级片| 中文字幕电影一区| 91精品国产综合久久久久久久| 99国产精品国产精品久久| 五月天一区二区三区| 国产精品午夜电影| 欧美二区在线观看| 久久国产精品一区二区三区| 国内外成人在线视频| 亚洲激情一二三区| www国产精品av| 欧美在线|欧美| 国产一区二区久久久| 色综合中文字幕国产 | 国产精品国产馆在线真实露脸| 久久一区二区精品| 亚洲国产综合在线看不卡| 欧美国产三级| 99久久精品国产麻豆演员表| 高清不卡一区二区| 久久国产人妖系列| 美女mm1313爽爽久久久蜜臀| 欧美极品美女视频| 欧美成va人片在线观看| 国产精品伊人日日| 99pao成人国产永久免费视频| 国产黄色精品网站| 精品一区二区三区在线播放视频| 亚洲少妇最新在线视频| 国产欧美日韩视频在线观看| 亚洲精品一区二区三区精华液 | 国产视频一区二区在线| 精品乱人伦小说| 久久影院亚洲| 国产精品女主播一区二区三区| 99re这里只有精品视频首页| 成人性生交大片免费看视频在线| 午夜欧美在线一二页| 亚洲精品国产无天堂网2021| 亚洲人一二三区| 亚洲美女电影在线| 亚洲色图视频网| 欧美精品一区二| 欧美亚日韩国产aⅴ精品中极品| 激情自拍一区| 伊人久久久大香线蕉综合直播| 成人综合在线视频| 一区二区三区不卡在线观看 | 国产亚洲女人久久久久毛片| 久久久亚洲综合| 中文字幕成人av| 亚洲卡通动漫在线| 亚洲高清视频在线| 天堂影院一区二区| 亚洲欧美国产高清| 一区二区三区四区在线免费观看| 久久精品一区二区| 国产精品久久久久久久久动漫 | 亚洲成人精品影院| 日韩综合一区二区| 麻豆精品视频在线观看| 国产一区在线不卡| 不卡av电影在线播放| 蜜臀久久99精品久久久画质超高清|