weixin_43894223 2022-09-21 15:29
浏览 12
已结题

前端读取csv8888-8格式转为日期的问题

使用前端读取CSV文件,csv中类似于8888-8的数据被读取为日期
private readCsvOrExcelCompatiblyANSI(file): Promise<any> {
        return new Promise(function (resolve, reject) {
            let wb,// file content
                rABS = false, //is read file as binary
                isCSV,
                reader = new FileReader(),
                is_file_contains_needed_columns = true,
                is_file_contains_Y_nes = true;

            reader.onload = () => {
                try {
                    let data:any = reader.result;
                    wb = null;
                    if (isCSV) {
                        data = new Uint8Array(data);
                        let isUTF8Coding = this.isUTF8(data);
                        if (isUTF8Coding) {
                            data = reader.result;
                        } else {
                            let decodeF = window['cptable']['utils']['decode'];
                            let str = decodeF(936, data);
                            wb = XLSX.read(str, { type: "string" });
                        }
                    }
                    if (!wb) {
                        let a = btoa(this.fixdata(data))
                        console.log(a)
                        wb = rABS || isCSV ? XLSX.read(a, { type: 'base64' }) : XLSX.read(data, { type: 'binary' });
                        console.log("wb: ", wb)
                    }
                    let fileContent = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]], { header: 1, raw: false });
                    // 1.check needed heads
                    let head = fileContent[0];

这里面

let a = btoa(this.fixdata(data)) 是:

private fixdata(data) { //file stream transfer to binary
        var o = "",
            l = 0,
            w = 10240;
        for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));
        o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));
        return o;

运行的结果是没有错误的:

img


但是在运行这一行 wb = rABS || isCSV ? XLSX.read(a, { type: 'base64' }) : XLSX.read(data, { type: 'binary' });
就会发生读取成日期的问题

img

我尝试过对XLSX.read(a, { type: 'base64' })中的参数进行设置,发现都不能解决这个问题
想要达到的结果就是把类似于2222-2的数据原封不动的读取,不要读取为日期的格式
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 9月29日
    • 创建了问题 9月21日

    悬赏问题

    • ¥100 Jenkins自动化部署—悬赏100元
    • ¥15 关于#python#的问题:求帮写python代码
    • ¥20 MATLAB画图图形出现上下震荡的线条
    • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
    • ¥15 perl MISA分析p3_in脚本出错
    • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
    • ¥15 ubuntu虚拟机打包apk错误
    • ¥199 rust编程架构设计的方案 有偿
    • ¥15 回答4f系统的像差计算
    • ¥15 java如何提取出pdf里的文字?