การแยกไฟล์ Excel workbook ขนาดใหญ่เป็นแผ่นงานแต่ละแผ่นเป็นความต้องการทั่วไปเมื่อคุณต้องการประมวลผลหรือแจกจ่ายข้อมูลต่อแผ่นงาน ความสามารถในการ split Excel Workbook in Java ช่วยให้นักพัฒนาสามารถแยกแต่ละแผ่นออกเพื่อการจัดการหรือการรายงานแยกต่างหาก Conholdate.Total for Java มี SDK ที่แข็งแกร่งทำให้งานนี้ทำได้อย่างง่ายดายในแอปพลิเคชัน Java ในคู่มือนี้คุณจะได้เห็นตัวอย่างโค้ดเต็มรูปแบบ เรียนรู้วิธีตั้งค่าห้องสมุด เข้าใจข้อพิจารณาด้านประสิทธิภาพ และรับเคล็ดลับการจัดการไฟล์ XLSX ขนาดใหญ่อย่างมีประทธิภาพ.
ตัวอย่างการทำงานเต็มสำหรับการแยกเวิร์กบุ๊ก Excel ใน Java
ตัวอย่างนี้แสดงวิธีการแยกเวิร์กบุ๊ก Excel ออกเป็นไฟล์แยกต่างหากโดยใช้ Conholdate.Total
import com.aspose.cells.Workbook;
import com.aspose.cells.Worksheet;
import com.aspose.cells.SaveFormat;
import java.io.File;
public class ExcelSplitter {
public static void main(String[] args) {
String sourceFile = "input.xlsx";
String outputDir = "splitted";
File dir = new File(outputDir);
if (!dir.exists()) {
dir.mkdirs();
}
try {
Workbook sourceWorkbook = new Workbook(sourceFile);
int sheetCount = sourceWorkbook.getWorksheets().getCount();
for (int i = 0; i < sheetCount; i++) {
Worksheet sheet = sourceWorkbook.getWorksheets().get(i);
Workbook splitWorkbook = new Workbook();
splitWorkbook.getWorksheets().addCopy(sheet);
if (splitWorkbook.getWorksheets().getCount() > 1) {
splitWorkbook.getWorksheets().removeAt(0);
}
String safeName = sheet.getName().replaceAll("[\\\\/:*?\"<>|]", "_");
String outPath = outputDir + File.separator + safeName + ".xlsx";
splitWorkbook.save(outPath, SaveFormat.XLSX);
splitWorkbook.dispose();
}
sourceWorkbook.dispose();
} catch (Exception e) {
System.err.println("Error during splitting: " + e.getMessage());
e.printStackTrace();
}
}
}
หมายเหตุ: ตัวอย่างโค้ดนี้แสดงการทำงานหลัก ก่อนนำไปใช้ในโครงการของคุณ โปรดตรวจสอบให้แน่ใจว่าได้อัปเดตเส้นทางไฟล์และค่าการกำหนดค่าต่าง ๆ ให้ตรงกับสภาพแวดล้อมจริงของคุณ ตรวจสอบว่าขึ้นตอนการพึ่งพาที่จำเป็นทั้งหมดได้ติดตั้งอย่างถูกต้อง และทำการทดสอบอย่างละเอียดในสภาพแวดล้อมการพัฒนา หากพบปัญหาใด ๆ โปรดดูที่ เอกสารอย่างเป็นทางการ หรือ ติดต่อทีม ฝ่ายสนับสนุน เพื่อขอความช่วยเหลือ.
คลาสสำคัญที่ใช้
โค้ดส่วนนี้พึ่งพา 3 คลาสหลักจากไลบรารี Aspose.Cells ที่มาพร้อมกับ Conholdate.Total:
Workbook- แทนไฟล์ Excel ทั้งไฟล์และให้เมธอดสำหรับโหลด, บันทึก, และจัดการ workbook. ดู Workbook class API reference.Worksheet- ให้การเข้าถึงแผ่นงานเดี่ยวภายใน workbook.SaveFormat- enumeration ที่กำหนดรูปแบบผลลัพธ์;SaveFormat.XLSXจะเขียนไฟล์ในคอนเทนเนอร์ XLSX สมัยใหม่.
คลาสเหล่านี้มีน้ำหนักเบา แต่พวกมันจัดสรรทรัพยากรเนทีฟ ดังนั้นการทำลาย (dispose) พวกมันอย่างทันท่วงที (ตามที่แสดง) เป็นสิ่งสำคัญสำหรับ การจัดการหน่วยความจำสำหรับไฟล์ Excel ขนาดใหญ่
แยกวิเคราะห์การแยก Excel Workbook ใน Java
โปรแกรมทำตามลำดับที่ชัดเจนซึ่งคุณสามารถปรับใช้กับกระบวนการทำงาน Excel Split Java ใดก็ได้
คำอธิบายทีละขั้นตอน
- โหลดเวิร์กบุ๊กต้นฉบับ -
new Workbook(sourceFile)อ่านไฟล์ XLSX อินพุต.
Workbook sourceWorkbook = new Workbook(sourceFile);
- Create output directory - ตรวจสอบว่าโฟลเดอร์เป้าหมายมีอยู่หรือไม่และสร้างมันหากจำเป็น.
File dir = new File(outputDir);
if (!dir.exists()) {
dir.mkdirs();
}
- วนซ้ำผ่านแผ่นงาน -
sourceWorkbook.getWorksheets().getCount()ให้จำนวนแผ่นงาน และลูปจะประมวลผลแต่ละแผ่นงาน.
for (int i = 0; i < sheetCount; i++) {
Worksheet sheet = sourceWorkbook.getWorksheets().get(i);
}
- คัดลอกแผ่นงานปัจจุบันไปยังสมุดงานใหม่ -
addCopy(sheet)ทำสำเนาแผ่นงาน, จากนั้นแผ่นงานว่างเริ่มต้นจะถูกลบหากมีอยู่.
Workbook splitWorkbook = new Workbook();
splitWorkbook.getWorksheets().addCopy(sheet);
if (splitWorkbook.getWorksheets().getCount() > 1) {
splitWorkbook.getWorksheets().removeAt(0);
}
- บันทึกเวิร์กบุ๊กที่แยกออก - สร้างชื่อไฟล์ที่ปลอดภัยและเขียนชีตเป็นไฟล์ XLSX.
String safeName = sheet.getName().replaceAll("[\\\\/:*?\"<>|]", "_");
String outPath = outputDir + File.separator + safeName + ".xlsx";
splitWorkbook.save(outPath, SaveFormat.XLSX);
- ปลดปล่อยทรัพยากร - เรียก
dispose()บนทั้งเวิร์กบุ๊กชั่วคราวและเวิร์กบุ๊กต้นฉบับเพื่อคืนหน่วยความจำและหลีกเลี่ยงการรั่วไหลของเนทีฟ
กระบวนการทั้งหมดเป็น ตัวอย่างโค้ด Java สำหรับแยกแผ่นงาน Excel ที่สามารถฝังลงใน pipeline การประมวลผลข้อมูลขนาดใหญ่ได้
ข้อกำหนดเบื้องต้นและการตั้งค่า - เริ่มต้นกับ Conholdate.Total
ก่อนที่คุณจะคอมไพล์และเรียกใช้ตัวอย่าง โปรดตรวจสอบให้แน่ใจว่าสภาพแวดล้อมการพัฒนาของคุณตรงตามข้อกำหนดเบื้องต้นต่อไปนี้
การกำหนดค่า Maven
เพิ่มที่เก็บ Maven ของ Conholdate และการพึ่งพา SDK ไปยัง pom.xml ของคุณ:
<repositories>
<repository>
<id>conholdate-repo</id>
<name>Conholdate Maven Repository</name>
<url>https://repository.conholdate.com/repo/</url>
</repository>
</repositories>
<dependency>
<groupId>com.conholdate</groupId>
<artifactId>conholdate-total</artifactId>
<version>24.9</version>
<type>pom</type>
</dependency>
ดาวน์โหลดแพ็กเกจ SDK ล่าสุดจากหน้าดาวน์โหลดอย่างเป็นทางการ: Conholdate.Total for Java ดาวน์โหลด. ไลบรารีต้องการ Java 8 หรือใหม่กว่าและทำงานบน JVM มาตรฐานใดก็ได้.
การกำหนดค่าใบอนุญาต
จำเป็นต้องมีใบอนุญาตที่ถูกต้องสำหรับการใช้งานในสภาพแวดล้อมการผลิต คุณสามารถรับใบอนุญาตชั่วคราวสำหรับการทดสอบได้จาก temporary license page. สำหรับโครงการระยะยาว ให้ตรวจสอบตัวเลือกการกำหนดราคาใน pricing page. เมื่อคุณมีไฟล์ใบอนุญาตแล้ว ให้ตั้งค่าในโค้ดเริ่มต้นของแอปพลิเคชันของคุณ (ไม่ได้แสดงที่นี่) ตามที่อธิบายไว้ในเอกสาร.
เคล็ดลับเชิงปฏิบัติสำหรับการแยกไฟล์ Excel อย่างมีประสิทธิภาพ
การทำงานกับสมุดงานขนาดใหญ่ต้องการการจัดการทรัพยากรอย่างระมัดระวัง คำแนะนำต่อไปนี้ช่วยให้คุณทำกระบวนการให้เร็วและเชื่อถือได้
คำแนะนำการจัดการหน่วยความจำ
- ทำลาย workbook ชั่วคราวแต่ละรายการ หลังจากบันทึกเพื่อปล่อยทรัพยากรพื้นฐานและลดการใช้หน่วยความจำให้ต่ำลง.
- ใช้วัตถุซ้ำเมื่อเป็นไปได้ - การสร้างอินสแตนซ์
Workbookเพียงหนึ่งตัวสำหรับแหล่งข้อมูลและใช้วัตถุFileเดียวกันสำหรับไดเรกทอรีผลลัพธ์ช่วยลดภาระของ garbage‑collector. - พิจารณาโหมดสตรีมมิ่ง หากเวอร์ชันของ Conholdate.Total ของคุณรองรับ; การสตรีมจะอ่านแถวตามความต้องการแทนการโหลด workbook ทั้งหมดเข้าสู่หน่วยความจำ.
ข้อผิดพลาดทั่วไปและวิธีหลีกเลี่ยง
| อาการ | สาเหตุที่เป็นไปได้ | วิธีแก้ไข |
|---|---|---|
java.lang.OutOfMemoryError | การเก็บเวิร์กบุ๊กที่แยกทั้งหมดในหน่วยความจำ | ตรวจสอบให้แน่ใจว่าได้เรียก splitWorkbook.dispose() ภายในลูปตามที่แสดง |
| Illegal file name error | ชื่อแผ่นงานมีอักขระเช่น `\ / : * ? " < > | ` |
| Missing output files | เส้นทางไดเรกทอรีผลลัพธ์ไม่ถูกต้องหรือไม่มีสิทธิ์เขียน | ตรวจสอบว่า outputDir ชี้ไปยังตำแหน่งที่มีสิทธิ์เขียน |
ตัวเพิ่มประสิทธิภาพ
- บันทึกความคืบหน้า - พิมพ์ชื่อแผ่นงานก่อนบันทึกช่วยให้คุณระบุจุดที่เกิดข้อผิดพลาดในชุดข้อมูลขนาดใหญ่ได้
- เพิ่มขนาด heap ของ JVM - สำหรับสมุดงานที่ใหญ่มาก ให้เริ่ม JVM ด้วย
-Xmx2g(หรือมากกว่านั้น) เพื่อให้กระบวนการมีหน่วยความจำเพิ่มขึ้น - การประมวลผลแบบขนาน - หากสมุดงานไม่มีการพึ่งพากัน คุณสามารถแบ่งงานไปยังหลายเธรดได้ แต่จำไว้ว่าไลบรารีเนทีฟพื้นฐานไม่ได้ปลอดภัยต่อการทำงานหลายเธรดเสมอ; ทดสอบอย่างละเอียด
โดยทำตามเคล็ดลับเหล่านี้ คุณสามารถ แยก Excel Workbook ใน Java ได้อย่างมีประสิทธิภาพ แม้ต้องจัดการกับแผ่นงานหลายพันแผ่นหรือเวิร์กบุ๊กที่มีขนาดหลายร้อยเมกะไบต์
สรุป
การแยกเวิร์กบุ๊ก Excel เป็นไฟล์ XLSX แยกแต่ละไฟล์ด้วย Conholdate.Total for Java เป็นเทคนิคที่ง่ายแต่ทรงพลังสำหรับนักพัฒนา Java ที่ต้องการเข้าถึงข้อมูลแผ่นงานอย่างละเอียด โค้ดที่ให้มาจะแสดงกระบวนการทำงานเต็มรูปแบบ ตั้งแต่การโหลดเวิร์กบุ๊กต้นฉบับจนถึงการปล่อยทรัพยากรหลังจากบันทึกแต่ละแผ่น การใช้วิธีนี้เพื่อ แยก Excel Workbook ใน Java จะให้การควบคุมที่ละเอียดต่อแต่ละแผ่นและรวมเข้ากับสายการประมวลผลข้อมูลขนาดใหญ่ได้อย่างง่ายดาย จำไว้ว่าให้รับใบอนุญาตที่เหมาะสมสำหรับการใช้งานในผลิตภัณฑ์; คุณสามารถสำรวจตัวเลือกราคาได้ที่ pricing page หรือขอใบอนุญาตชั่วคราวจาก temporary license page. เมื่อ SDK ถูกติดตั้งและได้ปฏิบัติตามคำแนะนำที่ดีที่สุดแล้ว คุณก็พร้อมจัดการกับสถานการณ์การแยก Excel ใน Java ที่ท้าทายที่สุด
คำถามที่พบบ่อย
ฉันจะทำการแยก Excel Workbook ใน Java โดยใช้ Conholdate.Total ได้อย่างไร?
ใช้คลาส ExcelSplitter ที่แสดงในตัวอย่างเต็ม มันโหลดเวิร์กบุ๊กต้นฉบับ, วนซ้ำผ่านแต่ละแผ่นงาน, สร้างเวิร์กบุ๊กใหม่ต่อแต่ละแผ่น, และบันทึกเป็นไฟล์ XLSX แยกส่วน วิธีนี้ยังทำงานได้เมื่อคุณต้องการ แยกไฟล์ XLSX ด้วย Java สำหรับขนาดเวิร์กบุ๊กใด ๆ
SDK รองรับกับเวอร์ชัน Java ทั้งหมดหรือไม่?
SDK รองรับ Java 8 ขึ้นไป ตรวจสอบให้โครงการของคุณตั้งค่าเป้าหมายเป็น JDK ที่เข้ากันได้
ฉันจำเป็นต้องตั้งค่าไลเซนส์ก่อนรันโค้ดหรือไม่?
จำเป็นต้องมีไลเซนส์สำหรับการใช้งานในสภาพแวดล้อมการผลิต คุณสามารถรับไลเซนส์ชั่วคราวสำหรับการทดสอบได้จาก หน้าไลเซนส์ชั่วคราว และตรวจสอบราคาเต็มได้ที่ หน้าแสดงราคา
ถ้าเวิร์กบุ๊กของฉันมีแผ่นงานหลายพันแผ่นจะเป็นอย่างไร?
ประมวลผลเวิร์กบุ๊กเป็นชุด ๆ ปล่อยเวิร์กบุ๊กชั่วคราวแต่ละอันโดยเร็ว และพิจารณาเพิ่มขนาด heap ของ JVM หากจำเป็น การบันทึกชื่อแผ่นงานแต่ละแผ่นจะช่วยให้คุณระบุแผ่นงานที่มีปัญหาได้อย่างรวดเร็ว
