iT邦幫忙

1

利用nodejs讀取excel裡物件夾帶多檔案(也不見得要用nodejs)

不好意思各位大大:
不知道有沒有人用nodejs或是其他程式語言處理過excel裡夾帶多檔案的issue
如以下圖片所示

動作:
是想要讀取到excel裡的檔案(使用插入物件的檔案),讀取後把此檔案新增到db裡
重點是要能讀取到那個檔案
如下所示,在File的欄位沒辦法讀取到那個檔案的object
(因為資料有點敏感,就消掉了,請見諒)

這個是我用exceljs的套件用的

在麻煩各位大大的幫忙了
我找了好多都找不到
都只有最單純的方法(只能讀取欄位中的圖片或文字)

忘了說:
我前端是用vuejs
後端是用nodejs

fillano iT邦超人 1 級 ‧ 2020-03-08 13:31:24 檢舉
格式?是xlsx的話,他是一個zip archive,可以用zip解開,檔案會在某個目錄中。
dragonH iT邦超人 5 級 ‧ 2020-03-08 14:17:33 檢舉
我剛查到的好像也是 fillano大 的這解法
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
dragonH
iT邦超人 5 級 ‧ 2020-03-09 02:26:27

下午測了一下

總之就是 embed 的檔案

會被放到 xl/embeddings/ 底下

並轉成 xxx.bin

所以要還原原本的檔案

就要去讀他的 header

把加工過的拿掉

不過後來發現不同檔案格式的 header 不太一樣

想想也是蠻合理的 XD

沒注意我都是用 .exe 來測

所以目前測試是 .exe 能正常提取

貼個部份的 code

其他有空再研究

(async () => {
    try {
        const excelFilesLocation = process.argv[2] || '.';
        console.log(`[Event]: Getting all excel files.`);
        const allExcelFiles = getAllExcelFiles(excelFilesLocation);
        if (!allExcelFiles.length) {
            throw new Error('No .xlsx file found.');
        }
        console.log(`[Event]: Getting all excel files succeed.`);
        console.log(`[Event]: Getting all object files.`);
        await unzipAllBinFiles(excelFilesLocation, allExcelFiles);
        console.log(`[Event]: Getting all object files succeed.`);
        console.log(`[Event]: Start output files.`);
        await extractOriginalFiles();
        console.log(`[Event]: Output files succeed.`);
    } catch (error) {
        console.log(`[Error]: ${error.message}`);
    } finally {
        console.log(`[Event]: Removing temp files.`);
        await removeTempFiles();
        console.log(`[Event]: Remove temp files succeed.`);
    }
})()

我要發表回答

立即登入回答