如何编写一个基于Windows环境的JavaScript脚本,利用Excel文件中存储的URL路径来下载相应的文件?
时间: 2024-10-22 22:12:50 浏览: 36
在Windows环境下,你可以使用JavaScript的ActiveXObject(IE浏览器)或者Node.js(推荐使用因为有更多库支持)配合`axios`或`file-saver`这样的库来实现这个功能。以下是两种方式的简要步骤:
1. **使用ActiveXObject (仅限于IE浏览器)**:
```javascript
if (typeof ActiveXObject !== 'undefined') {
// 创建Excel对象
var excel = new ActiveXObject("Excel.Application");
// 打开工作簿
var workbook = excel.Workbooks.Open('path\\to\\your\\excel.xlsx');
// 获取第一张工作表
var worksheet = workbook.Worksheets(1);
for (var i = 1; i <= worksheet.Cells特性的LastRow; i++) { // 假设每行有一个URL
var url = worksheet.Cells(i, 1).Value;
// 下载文件
downloadFile(url);
}
excel.Quit();
}
function downloadFile(url) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'blob';
xhr.onload = function() {
saveAs(this.response, 'downloaded_file.txt');
};
xhr.send();
}
```
**注意**: 这种方式只适用于IE浏览器,并且需要用户安装Microsoft Office。
2. **使用Node.js (推荐)**:
首先,你需要安装`xlsx`库读取Excel文件,`axios`下载文件,以及`fs`模块用于保存文件。
```javascript
const XLSX = require('xlsx');
const axios = require('axios');
const fs = require('fs');
async function readExcel(file) {
const workbook = XLSX.readFile(file);
const sheetNameList = workbook.SheetNames;
const urls = sheetNameList.reduce((acc, curSheet) => [...acc, ...workbook.Sheets[curSheet].data], []);
return urls.map(row => row[0]);
}
async function downloadFiles(urls) {
for await (let url of urls) {
try {
const response = await axios.get(url, { responseType: 'stream' });
fs.writeFileSync(`downloaded_${url.replace(/ /g, '_')}`, response.data);
} catch (error) {
console.error(`Failed to download ${url}:`, error);
}
}
}
// 使用示例
readExcel('path\\to\\your\\excel.xlsx')
.then(downloadFiles)
.catch(console.error);
```
记得替换`path\to\your\excel.xlsx`为实际Excel文件路径。
阅读全文