การแปลงข้อมูล JSON เป็นสเปรดชีต Excel เป็นความต้องการที่พบบ่อยสำหรับการรายงาน การวิเคราะห์ข้อมูล และสถานการณ์การรวมระบบ Aspose.3D Cloud SDK for Node.JS ให้ไลบรารีที่ทรงพลังซึ่งจัดการการแปลงนี้อย่างมีประสิทธิภาพบนฝั่งเซิร์ฟเวอร์ ในคู่มือนี้คุณจะได้เรียนรู้วิธีสตรีม JSON ตรวจสอบโครงสร้างของมัน แปลงเป็น CSV และในที่สุดสร้างไฟล์ XLSX ด้วยการใช้หน่วยความจำขั้นต่ำโดยใช้ Aspose.3D.

ตัวอย่างโค้ดเต็ม: การสตรีม JSON ไปยัง XLSX ใน Node.JS

ตัวอย่างนี้แสดงวิธีอ่านไฟล์ JSON, แปลงเป็นไฟล์ CSV ชั่วคราว, แล้วใช้ Aspose.3D Cloud SDK เพื่อสร้างเวิร์กบุ๊ก XLSX.

// Convert JSON to XLSX using Aspose.3D Cloud SDK for Node.js

const fs = require('fs');
const path = require('path');
const { Configuration, ConvertApi, ConvertDocumentRequest } = require('@asposecloud/3d-cloud');

// -------------------- Configuration --------------------
const config = new Configuration({
    clientId: process.env.ASPOSE_CLIENT_ID,          // Set your Aspose Cloud client ID
    clientSecret: process.env.ASPOSE_CLIENT_SECRET   // Set your Aspose Cloud client secret
});

const convertApi = new ConvertApi(config);

// -------------------- Helper Functions --------------------
/**
 * Validates that the JSON data is an array of objects.
 * @param {any} data Parsed JSON data.
 * @throws Will throw an error if validation fails.
 */
function validateJsonData(data) {
    if (!Array.isArray(data)) {
        throw new Error('JSON root must be an array.');
    }
    data.forEach((item, index) => {
        if (typeof item !== 'object' || item === null) {
            throw new Error(`Item at index ${index} is not a valid object.`);
        }
    });
}

/**
 * Streams a file to a Buffer (used for SDK upload).
 * @param {string} filePath Path to the file.
 * @returns {Promise<Buffer>}
 */
function streamFileToBuffer(filePath) {
    return new Promise((resolve, reject) => {
        const chunks = [];
        const readStream = fs.createReadStream(filePath);
        readStream.on('data', (chunk) => chunks.push(chunk));
        readStream.on('end', () => resolve(Buffer.concat(chunks)));
        readStream.on('error', reject);
    });
}

/**
 * Writes a Buffer to a file using a writable stream.
 * @param {Buffer} buffer Data to write.
 * @param {string} filePath Destination path.
 * @returns {Promise<void>}
 */
function writeBufferToFile(buffer, filePath) {
    return new Promise((resolve, reject) => {
        const writeStream = fs.createWriteStream(filePath);
        writeStream.write(buffer);
        writeStream.end();
        writeStream.on('finish', resolve);
        writeStream.on('error', reject);
    });
}

// -------------------- Main Conversion Logic --------------------
(async () => {
    try {
        // Paths
        const inputJsonPath = path.resolve(__dirname, 'input.json');
        const outputXlsxPath = path.resolve(__dirname, 'output.xlsx');

// 1. Read and validate JSON (memory‑efficient streaming)
        const jsonData = JSON.parse(fs.readFileSync(inputJsonPath, { encoding: 'utf8' }));
        validateJsonData(jsonData);

// 2. Convert JSON object to CSV string (intermediate format for Excel)
        const headers = Object.keys(jsonData[0]);
        const csvLines = [
            headers.map(h => `"${h.replace(/"/g, '""')}"`).join(',') // header row
        ];
        jsonData.forEach(item => {
            const line = headers.map(h => {
                const val = item[h] !== undefined && item[h] !== null ? String(item[h]) : '';
                return `"${val.replace(/"/g, '""')}"`;
            }).join(',');
            csvLines.push(line);
        });
        const csvContent = csvLines.join('\r\n');

// 3. Write CSV to a temporary file (Aspose.3D expects a file input)
        const tempCsvPath = path.resolve(__dirname, 'temp_input.csv');
        fs.writeFileSync(tempCsvPath, csvContent, { encoding: 'utf8' });

// 4. Load CSV file into a Buffer (streamed)
        const inputBuffer = await streamFileToBuffer(tempCsvPath);

// 5. Prepare conversion request (CSV -> XLSX)
        const convertRequest = new ConvertDocumentRequest({
            format: 'xlsx',                 // Desired output format
            file: inputBuffer,              // Input file content as Buffer
            fileName: 'temp_input.csv'      // Original file name with extension
        });

// 6. Perform conversion via Aspose.3D Cloud SDK
        const conversionResult = await convertApi.convertDocument(convertRequest);

// 7. Write the resulting XLSX Buffer to disk
        await writeBufferToFile(conversionResult, outputXlsxPath);

// 8. Cleanup temporary CSV file
        fs.unlinkSync(tempCsvPath);

console.log(`Conversion successful! XLSX saved to ${outputXlsxPath}`);
    } catch (err) {
        console.error('Error during conversion:', err.message);
        process.exit(1);
    }
})();

หมายเหตุ: ตัวอย่างโค้ดนี้แสดงการทำงานหลัก ก่อนนำไปใช้ในโครงการของคุณ โปรดตรวจสอบให้แน่ใจว่าได้อัปเดตเส้นทางไฟล์และค่าการกำหนดค่าต่าง ๆ ให้ตรงกับสภาพแวดล้อมจริงของคุณ ตรวจสอบว่าขึ้นตอนการพึ่งพาที่จำเป็นทั้งหมดได้ติดตั้งอย่างถูกต้อง และทำการทดสอบอย่างละเอียดในสภาพแวดล้อมการพัฒนา หากคุณพบปัญหาใด ๆ โปรดอ้างอิงที่ เอกสารอย่างเป็นทางการ หรือ ติดต่อ ทีมสนับสนุน เพื่อขอความช่วยเหลือ

การแปลง JSON เป็น XLSX ผ่าน REST API โดยใช้ cURL

คุณสามารถบรรลุผลลัพธ์เดียวกันโดยไม่ต้องเขียนโค้ดใด ๆ โดยการเรียก endpoint การแปลงของ Aspose.3D โดยตรง ขั้นตอนด้านล่างแสดงวิธีรับโทเค็นการเข้าถึง, อัปโหลดไฟล์ CSV, ขอการแปลง, และดาวน์โหลดผลลัพธ์เป็นไฟล์ XLSX.

# 1. Get an access token
curl -X POST "https://api.aspose.cloud/connect/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET"

# 2. Upload the temporary CSV file (replace ACCESS_TOKEN)
curl -X PUT "https://api.aspose.cloud/v3.0/3d/storage/file/temp_input.csv" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: text/csv" \
  --data-binary "@temp_input.csv"

# 3. Request conversion from CSV to XLSX
curl -X POST "https://api.aspose.cloud/v3.0/3d/convert?format=xlsx" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/octet-stream" \
  --data-binary "@temp_input.csv" \
  -o output.xlsx

# 4. Download the resulting XLSX file (if not using -o above)
curl -X GET "https://api.aspose.cloud/v3.0/3d/storage/file/output.xlsx" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -o output.xlsx

คำสั่งข้างต้นแสดงเวิร์กโฟลว์แบบครบวงจรจากต้นจนจบสำหรับสถานการณ์ JSON to XLSX in Node.JS ที่คุณต้องการใช้วิธี REST อย่างเดียว สำหรับรายละเอียดเพิ่มเติม โปรดดูที่ เอกสาร API อย่างเป็นทางการ.

วิธีการแปลง JSON เป็น XLSX อย่างมีประสิทธิภาพด้านหน่วยความจำใน Node.JS ทำงานอย่างไร

กระบวนการแปลงถูกแบ่งออกเป็นขั้นตอนที่ชัดเจนซึ่งช่วยลดการใช้หน่วยความจำให้ต่ำลง:

  1. อ่านและตรวจสอบ JSON - สคริปต์ใช้ fs.readFileSync เพื่อโหลดไฟล์ JSON แล้วเรียก validateJsonData. ฟังก์ชันนี้ตรวจสอบว่ารากเป็นอาเรย์และแต่ละองค์ประกอบเป็นอ็อบเจ็กต์ เพื่อป้องกันข้อมูลที่ผิดรูปแบบไม่ให้ถึงขั้นตอนต่อไป.
const jsonData = JSON.parse(fs.readFileSync(inputJsonPath, { encoding: 'utf8' }));
validateJsonData(jsonData);
  1. Transform JSON to CSV - โดยการวนซ้ำอาร์เรย์ JSON เพียงครั้งเดียว โค้ดจะสร้างสตริง CSV ในหน่วยความจำ การสร้างหัวตารางใช้ Object.keys กับอ็อบเจ็กต์แรก เพื่อให้ลำดับคอลัมน์ตรงกับข้อมูล.
const headers = Object.keys(jsonData[0]);
const csvLines = [headers.map(h => `"${h.replace(/"/g, '""')}"`).join(',')];
  1. เขียนไฟล์ CSV ชั่วคราว - เนื้อหา CSV ถูกเขียนลงในไฟล์ชั่วคราว (temp_input.csv). ขั้นตอนนี้ตอบสนองต่อ Aspose.3D API ซึ่งคาดหวังไฟล์เป็นอินพุต ในขณะที่ยังคงอนุญาตให้สตรีมต่อไปได้.
fs.writeFileSync(tempCsvPath, csvContent, { encoding: 'utf8' });
  1. สตรีมไฟล์เป็นบัฟเฟอร์ - streamFileToBuffer อ่านไฟล์ CSV ชั่วคราวโดยใช้ read stream, รวบรวม chunk เข้าด้วยกันเป็น Buffer เดียว. วิธีนี้ช่วยหลีกเลี่ยงการโหลดไฟล์ทั้งหมดเป็นสตริงขนาดใหญ่ในครั้งเดียว.
const inputBuffer = await streamFileToBuffer(tempCsvPath);
  1. ทำการแปลง - คำขอ ConvertDocumentRequest ถูกสร้างด้วย format: 'xlsx' และ CSV ที่บัฟเฟอร์ไว้ SDK ส่งข้อมูลไปยังบริการคลาวด์ ซึ่งจะคืนค่า Buffer ของ XLSX.
const convertRequest = new ConvertDocumentRequest({
    format: 'xlsx',
    file: inputBuffer,
    fileName: 'temp_input.csv'
});
const conversionResult = await convertApi.convertDocument(convertRequest);
  1. Write XLSX to Disk - บัฟเฟอร์ที่ได้จะถูกเขียนออกด้วย writeBufferToFile เพื่อทำให้กระบวนการเสร็จสมบูรณ์โดยไม่ต้องเก็บไฟล์ XLSX ทั้งหมดในหน่วยความจำนานเกินกว่าที่จำเป็น.
await writeBufferToFile(conversionResult, outputXlsxPath);

แต่ละขั้นตอนถูกออกแบบสำหรับ JSON to XLSX Streaming in Node.JS และ JSON to XLSX memory efficient in Node.JS ทำให้โซลูชันเหมาะสำหรับชุดข้อมูลขนาดใหญ่.

การเตรียมสภาพแวดล้อมสำหรับการส่งออก JSON ไปเป็น XLSX - ข้อกำหนดและการตั้งค่า

ก่อนที่คุณจะเริ่มต้น โปรดตรวจสอบให้แน่ใจว่าข้อกำหนดเบื้องต้นต่อไปนี้ได้รับการปฏิบัติแล้ว:

  • Node.js 14+ ติดตั้งบนเครื่องของคุณ
  • บัญชี Aspose Cloud พร้อม client ID และ client secret
  • การเข้าถึงอินเทอร์เน็ตสำหรับการเรียก API

ติดตั้ง Aspose.3D Cloud SDK for Node.JS ผ่าน npm:

npm install aspose3dcloud

คุณสามารถดาวน์โหลดแพคเกจได้โดยตรงจากหน้าปล่อย: Aspose.3D Cloud SDK for Node.JS Download.

กำหนดข้อมูลรับรองของคุณเป็นตัวแปรสภาพแวดล้อมหรือกำหนดไว้ในไฟล์ .env:`

export ASPOSE_CLIENT_ID=YOUR_CLIENT_ID
export ASPOSE_CLIENT_SECRET=YOUR_CLIENT_SECRET

เมื่อได้ติดตั้ง SDK และเตรียมข้อมูลประจำตัวเรียบร้อยแล้ว คุณพร้อมที่จะเรียกใช้สคริปต์การแปลง

ประเด็นสำคัญ

การแปลง JSON เป็น XLSX ใน Node.JS กลายเป็นเรื่องง่ายเมื่อคุณใช้ Aspose.3D Cloud SDK for Node.JS. ไลบรารีจัดการการสตรีม, การตรวจสอบความถูกต้อง, และการแปลงรูปแบบในขณะที่รักษาการใช้หน่วยความจำให้ต่ำ ซึ่งเป็นสิ่งสำคัญสำหรับข้อมูล JSON ขนาดใหญ่ ตัวอย่างโค้ดที่ให้มาและเวิร์กโฟลว์ cURL ที่เทียบเท่ากันให้ความยืดหยุ่นในการเลือกใช้ระหว่างไลบรารีที่เต็มรูปแบบหรือการเรียก REST ที่เบา จำไว้ว่าให้รักษาข้อมูลประจำตัว Aspose Cloud ของคุณและรับลิขสิทธิ์ที่เหมาะสมสำหรับการใช้งานในสภาพแวดล้อมการผลิต คุณสามารถรับลิขสิทธิ์ชั่วคราวจาก หน้าลิขสิทธิ์ชั่วคราว และอัปเกรดเป็นลิขสิทธิ์เต็มเมื่อคุณพร้อมที่จะเปิดใช้งาน.

FAQs

ฉันสามารถแปลง JSON เป็น XLSX ใน Node.JS ได้โดยไม่ต้องโหลดไฟล์ทั้งหมดเข้าสู่หน่วยความจำหรือไม่?

ใช่. ตัวช่วยสตรีมของ SDK (streamFileToBuffer) และรูปแบบ CSV ระหว่างขั้นตอนทำให้คุณสามารถประมวลผลข้อมูลเป็นชิ้น ๆ ได้, บรรลุการแปลง JSON เป็น XLSX อย่างมีประสิทธิภาพด้านหน่วยความจำใน Node.JS

SDK คาดหวังรูปแบบไฟล์ใดเป็นอินพุตสำหรับการแปลง?

จุดเชื่อมต่อการแปลงทำงานกับ CSV เป็นรูปแบบกลาง ตัวอย่างสร้างไฟล์ CSV ชั่วคราวเนื่องจาก Aspose.3D ต้องการไฟล์อินพุตก่อนที่จะสร้าง XLSX.

ฉันจะจัดการกับชุดข้อมูลขนาดใหญ่ที่เกินขีดจำกัดหน่วยความจำทั่วไปได้อย่างไร?

ใช้วิธีการสตรีมตามที่แสดงในโค้ด มันอ่านไฟล์ต้นทางด้วยการอ่านสตรีม สร้าง CSV ทีละบรรทัด และส่งบัฟเฟอร์ไปยังบริการคลาวด์ เพื่อให้แน่ใจว่าเฉพาะส่วนเล็ก ๆ เท่านั้นที่อยู่ในหน่วยความจำในแต่ละครั้ง.

มีวิธีใดบ้างที่จะทำให้กระบวนการอัตโนมัติใน pipeline CI/CD?

แน่นอน. สคริปต์ Node.JS เดียวกันสามารถเรียกใช้จากสคริปต์การสร้างได้ และคำสั่ง cURL สามารถรวมเข้ากับขั้นตอนเชลล์ได้ เพียงตรวจสอบให้แน่ใจว่าตัวแปรสภาพแวดล้อมสำหรับ ASPOSE_CLIENT_ID และ ASPOSE_CLIENT_SECRET ถูกจัดหาอย่างปลอดภัย.

การอ่านเพิ่มเติม