Javascript 如何设置单元格样式';将html表导出到XLSX时的子项
如何在导出过程中设置单元格子元素的样式 给定一个如下所示的foo表:Javascript 如何设置单元格样式';将html表导出到XLSX时的子项,javascript,excel,formatting,export-to-excel,Javascript,Excel,Formatting,Export To Excel,如何在导出过程中设置单元格子元素的样式 给定一个如下所示的foo表: <table id="myTableName"> <thead id="myTableNameHdr"><tr><th style="background-color:navy;color:white;">Test<th></tr></thead> <tbody id="myTableNameBod"><tr><t
<table id="myTableName">
<thead id="myTableNameHdr"><tr><th style="background-color:navy;color:white;">Test<th></tr></thead>
<tbody id="myTableNameBod"><tr><td>
Choose
<span style="color:red">RED </span>
or
<span style="color:blue">BLUE </span>
colors...
<td></tr></tbody>
</table>
试验
选择
红色
或
蓝色
颜色。。。
如何以转换为excel的方式呈现单元格中的红色和蓝色文本。使用内联样式适用于单元级样式,因为我在foo标题行中有内联样式。但是,内部文本样式将被删除。我意识到这可能是获取文本属性与迭代我正在使用的库中的子对象的副产品。还有别的选择吗
我使用的是我继承的js,我没有非精简版本:(我希望有人知道它是谁。也许有人会认出它 格式化min.js代码的一部分:(未包括所有代码,因为总共超过35K行)
if(!Object.keys){
Object.keys=(函数(){
var hasOwnProperty=Object.prototype.hasOwnProperty,
hasDontEnumBug=({
toString:null
})
.Property可枚举(“toString”),
dontEnums=[“toString”、“toLocaleString”、“valueOf”、“hasOwnProperty”、“isPrototypeOf”、“propertyIsEnumerable”、“constructor”],
dontEnumsLength=dontEnums.length;
返回函数(obj){
if(对象的类型!==“对象”&&typeof obj!==“函数”| | obj===null){
抛出新的TypeError(“在非对象上调用Object.keys”);
}
var结果=[];
用于(obj中的var prop){
if(hasOwnProperty.call(obj,prop)){
结果:推动(支撑);
}
}
如果(hasDontEnumBug){
对于(变量i=0;i>>0;
如果(乐趣的类型!=“功能”){
抛出新的TypeError();
}
var-res=[];
var thisp=参数[1];
对于(变量i=0;i>>0;
如果(乐趣的类型!=“功能”){
抛出新的TypeError();
}
var thisArg=arguments.length>=2?参数[1]:无效0;
对于(变量i=0;i>>0;
if(回调类型!=“函数”){
抛出新类型错误(回调+“不是函数”);
}
if(thisArg){
T=thisArg;
}
A=新阵列(len);
k=0;
while(k>>0;
fromIndex=+fromIndex | | 0;
if(Math.abs(fromIndex)==无穷大){
fromIndex=0;
}
如果(从索引<0){
fromIndex+=长度;
如果(从索引<0){
fromIndex=0;
}
}
对于(;fromIndex
同一文件的更深层代码段:
var HTML_ = (function () {
function html_to_sheet(str, _opts) {
var opts = _opts || {};
if (DENSE != null && opts.dense == null) {
opts.dense = DENSE;
}
var ws = opts.dense ? ([]) : ({});
var i = str.indexOf("<table"),
j = str.indexOf("</table");
if (i == -1 || j == -1) {
throw new Error("Invalid HTML: missing <table> / </table> pair");
}
var rows = str.slice(i, j)
.split(/(:?<tr[^>]*>)/);
var R = -1,
C = 0,
RS = 0,
CS = 0;
var range = {
s: {
r: 10000000,
c: 10000000
},
e: {
r: 0,
c: 0
}
};
var merges = [],
midx = 0;
for (i = 0; i < rows.length; ++i) {
var row = rows[i].trim();
if (row.substr(0, 3) == "<tr") {
++R;
C = 0;
continue;
}
if (row.substr(0, 3) != "<td") {
continue;
}
var cells = row.split("</td>");
for (j = 0; j < cells.length; ++j) {
var cell = cells[j].trim();
if (cell.substr(0, 3) != "<td") {
continue;
}
var m = cell,
cc = 0;
while (m.charAt(0) == "<" && (cc = m.indexOf(">")) > -1) {
m = m.slice(cc + 1);
}
while (m.indexOf(">") > -1) {
m = m.slice(0, m.lastIndexOf("<"));
}
var tag = parsexmltag(cell.slice(0, cell.indexOf(">")));
CS = tag.colspan ? +tag.colspan : 1;
if ((RS = +tag.rowspan) > 0 || CS > 1) {
merges.push({
s: {
r: R,
c: C
},
e: {
r: R + (RS || 1) - 1,
c: C + CS - 1
}
});
}
if (!m.length) {
C += CS;
continue;
}
m = unescapexml(m)
.replace(/[\r\n]/g, "");
if (range.s.r > R) {
range.s.r = R;
}
if (range.e.r < R) {
range.e.r = R;
}
if (range.s.c > C) {
range.s.c = C;
}
if (range.e.c < C) {
range.e.c = C;
}
if (opts.dense) {
if (!ws[R]) {
ws[R] = [];
}
if (Number(m) == Number(m)) {
ws[R][C] = {
t: "n",
v: +m
};
} else {
ws[R][C] = {
t: "s",
v: m
};
}
} else {
var coord = encode_cell({
r: R,
c: C
});
if (Number(m) == Number(m)) {
ws[coord] = {
t: "n",
v: +m
};
} else {
ws[coord] = {
t: "s",
v: m
};
}
}
C += CS;
}
}
ws["!ref"] = encode_range(range);
return ws;
}
var HTML=(函数(){
函数html到表单(str,_opts){
var opts=_opts |{};
if(稠密!=null&&opts.DENSE==null){
opts.densed=密集;
}
var ws=opts.densed?([]):({});
var i=str.indexOf(“答案是,只要您为专业版付费,就可以完成
var HTML_ = (function () {
function html_to_sheet(str, _opts) {
var opts = _opts || {};
if (DENSE != null && opts.dense == null) {
opts.dense = DENSE;
}
var ws = opts.dense ? ([]) : ({});
var i = str.indexOf("<table"),
j = str.indexOf("</table");
if (i == -1 || j == -1) {
throw new Error("Invalid HTML: missing <table> / </table> pair");
}
var rows = str.slice(i, j)
.split(/(:?<tr[^>]*>)/);
var R = -1,
C = 0,
RS = 0,
CS = 0;
var range = {
s: {
r: 10000000,
c: 10000000
},
e: {
r: 0,
c: 0
}
};
var merges = [],
midx = 0;
for (i = 0; i < rows.length; ++i) {
var row = rows[i].trim();
if (row.substr(0, 3) == "<tr") {
++R;
C = 0;
continue;
}
if (row.substr(0, 3) != "<td") {
continue;
}
var cells = row.split("</td>");
for (j = 0; j < cells.length; ++j) {
var cell = cells[j].trim();
if (cell.substr(0, 3) != "<td") {
continue;
}
var m = cell,
cc = 0;
while (m.charAt(0) == "<" && (cc = m.indexOf(">")) > -1) {
m = m.slice(cc + 1);
}
while (m.indexOf(">") > -1) {
m = m.slice(0, m.lastIndexOf("<"));
}
var tag = parsexmltag(cell.slice(0, cell.indexOf(">")));
CS = tag.colspan ? +tag.colspan : 1;
if ((RS = +tag.rowspan) > 0 || CS > 1) {
merges.push({
s: {
r: R,
c: C
},
e: {
r: R + (RS || 1) - 1,
c: C + CS - 1
}
});
}
if (!m.length) {
C += CS;
continue;
}
m = unescapexml(m)
.replace(/[\r\n]/g, "");
if (range.s.r > R) {
range.s.r = R;
}
if (range.e.r < R) {
range.e.r = R;
}
if (range.s.c > C) {
range.s.c = C;
}
if (range.e.c < C) {
range.e.c = C;
}
if (opts.dense) {
if (!ws[R]) {
ws[R] = [];
}
if (Number(m) == Number(m)) {
ws[R][C] = {
t: "n",
v: +m
};
} else {
ws[R][C] = {
t: "s",
v: m
};
}
} else {
var coord = encode_cell({
r: R,
c: C
});
if (Number(m) == Number(m)) {
ws[coord] = {
t: "n",
v: +m
};
} else {
ws[coord] = {
t: "s",
v: m
};
}
}
C += CS;
}
}
ws["!ref"] = encode_range(range);
return ws;
}