XLSX怎么设置单元格类型呢
以下是目前写好的方法,比方说我想设置A1-A10的单元格类型都是文本该如何修改呢
export const DownloadExl = (json: any, type?: any) => {
var data = json[0];
json.unshift({});
var keyMap: any = []; //获取keys
for (var k in data) {
keyMap.push(k);
json[0][k] = k;
}
var tmpdata: any = []; //用来保存转换好的json
json
.map((v: any, i: any) =>
keyMap.map((k: any, j: any) =>
Object.assign(
{},
{
v: v[k],
position:
(j > 25 ? getCharCol(j) : String.fromCharCode(65 + j)) + (i + 1)
}
)
)
)
.reduce((prev: any, next: any) => prev.concat(next))
.forEach(
(v: any, i: any) => {
(tmpdata[v.position] = {
v: v.v
})
}
);
var outputPos = Object.keys(tmpdata); //设置区域,比如表格从A1到D10
var tmpWB = {
SheetNames: ['mySheet'], //保存的表标题
Sheets: {
mySheet: Object.assign(
{},
tmpdata, //内容
{
'!ref': outputPos[0] + ':' + outputPos[outputPos.length - 1] //设置填充区域
}
)
}
};
var tmpDown = new Blob(
[
s2ab(
XLSX.write(
tmpWB,
{
bookType: type ? 'xlsx' : type,
bookSST: false,
type: 'binary'
} //这里的数据是用来定义导出的格式类型
)
)
],
{
type: ''
}
); //创建二进制对象写入转换好的字节流
var href = URL.createObjectURL(tmpDown); //创建对象超链接
setTimeout(() => {
let newTmpDown = tmpDown.toString();
URL.revokeObjectURL(newTmpDown); //用URL.revokeObjectURL()来释放这个object URL
}, 100);
return href;
};
const s2ab = (s: any) => {
//字符串转字符流
var buf = new ArrayBuffer(s.length);
var view = new Uint8Array(buf);
// @ts-ignore
for (var i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
return buf;
};
// 将指定的自然数转换为26进制表示。映射关系:[0-25] -> [A-Z]。
const getCharCol = (n: any) => {
let s = '',
m = 0;
while (n > 0) {
m = (n % 26) + 1;
s = String.fromCharCode(m + 64) + s;
n = (n - m) / 26;
}
return s;
};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
老哥,你找到解决办法了吗