รวมไฟล์ Excel หลายไฟล์เป็นไฟล์เดียว

คุณมีเวิร์กบุ๊ก Excel (XLSX, XLS) หลายรายการ และคุณต้องการผสานเข้าด้วยกันเป็นไฟล์เดียวสำหรับการรายงานหรือเพื่อเก็บข้อมูลไว้ในที่เดียว ในฐานะนักพัฒนา Java คุณสามารถรวมไฟล์ Excel หลายไฟล์เป็นไฟล์เดียวได้อย่างง่ายดายโดยทางโปรแกรม ในบทความนี้ คุณจะได้เรียนรู้วิธีรวมไฟล์ Excel หลายไฟล์เป็นไฟล์เดียวโดยใช้ Java

หัวข้อต่อไปนี้จะกล่าวถึง/ครอบคลุมในบทความนี้:

Java API เพื่อรวมไฟล์ Excel

สำหรับการรวมไฟล์ Excel หลายไฟล์ ฉันจะใช้ Aspose.Cells for Java API API นี้ช่วยให้คุณสร้าง จัดการ แปลง ป้องกัน หรือพิมพ์สเปรดชีตโดยไม่ต้องอาศัย Microsoft Excel ช่วยให้คุณสามารถดำเนินการคุณลักษณะการทำงานอัตโนมัติของ Excel โดยทางโปรแกรมในแอปพลิเคชัน Java ของคุณ

คุณสามารถ ดาวน์โหลด JAR ของ API หรือเพียงเพิ่มการกำหนดค่า pom.xml ต่อไปนี้ในแอปพลิเคชัน Java ที่ใช้ Maven ของคุณเพื่อลองใช้ตัวอย่างโค้ดที่กล่าวถึงด้านล่าง

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>https://repository.aspose.com/repo/</url>
</repository>
<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-cells</artifactId>
    <version>21.8</version>
</dependency>

Java รวมไฟล์ Excel หลายไฟล์เป็นไฟล์เดียว

คุณสามารถรวมไฟล์ Excel หลายไฟล์เป็นไฟล์เดียวได้อย่างง่ายดายโดยทางโปรแกรมโดยทำตามขั้นตอนที่ระบุไว้ด้านล่าง:

  1. สร้างอินสแตนซ์ของคลาส Workbook ด้วยไฟล์ต้นฉบับแรก
  2. สร้างอินสแตนซ์ของคลาส สมุดงาน ด้วยไฟล์ต้นฉบับที่สอง
  3. ทำซ้ำขั้นตอนข้างต้นเพื่อรวมไฟล์มากกว่าสองไฟล์
  4. เรียกเมธอด combine() ด้วยอินสแตนซ์ไฟล์ต้นฉบับที่สอง
  5. ทำซ้ำขั้นตอนข้างต้นสำหรับไฟล์ต้นฉบับทั้งหมดทีละไฟล์
  6. บันทึกไฟล์เอาต์พุตโดยการเรียกเมธอด save() ของคลาส Workbook

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีรวมไฟล์ Excel หลายไฟล์เป็นไฟล์เดียวโดยใช้ Java

// เปิดไฟล์ Excel ไฟล์แรก
Workbook SourceBook1 = new Workbook("C:\\Files\\Quarter_1.xlsx");

// เปิดไฟล์ Excel ไฟล์ที่สอง
Workbook SourceBook2 = new Workbook("C:\\Files\\Quarter_2.xlsx");

// เปิดไฟล์ Excel ไฟล์ที่สาม
Workbook SourceBook3 = new Workbook("C:\\Files\\Quarter_3.xlsx");

// คัดลอกแผ่นงานของไฟล์ Excel ที่สองไปยังสมุดงานแรก
SourceBook1.combine(SourceBook2);

// คัดลอกแผ่นงานของไฟล์ Excel ที่สามไปยังสมุดงานแรก
SourceBook1.combine(SourceBook3);

// บันทึกไฟล์ Excel แรกที่อัปเดตเป็นไฟล์ใหม่
SourceBook1.save("C:\\Files\\CombinedFile.xlsx");
รวมไฟล์ Excel หลายไฟล์เป็นไฟล์เดียวโดยใช้ Java

รวมไฟล์ Excel หลายไฟล์เป็นไฟล์เดียวโดยใช้ Java

คลาส สมุดงาน ของ API คือคลาสหลักที่ใช้ในการสร้างสเปรดชีต Excel ช่วยให้คุณสามารถเปิดและบันทึกไฟล์ Excel ดั้งเดิมได้ นอกจากนี้ยังมีคุณสมบัติและวิธีการต่างๆ มากมายในการทำงานกับ Excel Spreadsheet combine() วิธีการของคลาสนี้จะรวมสมุดงานปัจจุบันกับวัตถุสมุดงานอื่น save() วิธีการของคลาสสมุดงานจะบันทึกไฟล์เอาต์พุตที่เส้นทางไฟล์ที่ระบุ

รวมแผ่นงานเฉพาะของไฟล์ Excel หลายไฟล์ไว้ในที่เดียว - คู่มือ Java

คุณสามารถรวมแผ่นงานเฉพาะจากไฟล์ Excel หลายไฟล์เป็นไฟล์เดียวโดยทางโปรแกรมได้โดยทำตามขั้นตอนที่กล่าวถึงด้านล่าง:

  1. สร้างอินสแตนซ์ของคลาส สมุดงาน สำหรับไฟล์ต้นฉบับ 1
  2. สร้างอินสแตนซ์ของคลาส สมุดงาน สำหรับไฟล์ต้นฉบับ 2
  3. ทำซ้ำขั้นตอนข้างต้นเพื่อรวมแผ่นงานจากไฟล์มากกว่าสองไฟล์
  4. สร้างอินสแตนซ์ของคลาส Workbook สำหรับไฟล์ปลายทาง
  5. เพิ่มแผ่นงานโดยใช้เมธอด add() ของคลาส WorksheetCollection
  6. เรียกใช้เมธอด copy() เพื่อคัดลอกแผ่นงานที่ระบุจากไฟล์ต้นฉบับ 1 ไปยังไฟล์ปลายทาง
  7. เรียกเมธอด copy() เพื่อคัดลอกแผ่นงานที่ระบุจากไฟล์ต้นฉบับ 2 ไปยังไฟล์ปลายทาง
  8. เปลี่ยนชื่อแผ่นงานในไฟล์ปลายทางโดยใช้เมธอด setName()
  9. บันทึกไฟล์ปลายทางโดยการเรียกเมธอด save() ของคลาส Workbook

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีรวมแผ่นงานเฉพาะจากไฟล์ Excel หลายไฟล์เป็นไฟล์เดียวโดยใช้ Java

String sourceFile1 = "Quarter_1.xlsx";
String sourceFile2 = "Quarter_2.xlsx";

// เปิดไฟล์ Excel ไฟล์แรก
Workbook excelA = new Workbook("C:\\Files\\" + sourceFile1);

// เปิดไฟล์ Excel ไฟล์ที่สอง
Workbook excelB = new Workbook("C:\\Files\\" + sourceFile2);

// สร้างสมุดงานปลายทาง
Workbook destWorkbook = new Workbook();

// แผ่นงานแรกจะถูกเพิ่มลงในสมุดงานตามค่าเริ่มต้น เพิ่มแผ่นงานที่สอง
destWorkbook.getWorksheets().add();

// คัดลอกแผ่นงานมกราคมของไฟล์ Excel แรกไปยังไฟล์ปลายทาง
destWorkbook.getWorksheets().get(0).copy(excelA.getWorksheets().get("Jan"));

// คัดลอกแผ่นงานเดือนกรกฎาคมของไฟล์ Excel ที่สองไปยังไฟล์ปลายทาง
destWorkbook.getWorksheets().get(1).copy(excelB.getWorksheets().get("Jul"));

// ตามค่าเริ่มต้น ชื่อเวิร์กชีตคือ "Sheet1" และ "Sheet2" ตามลำดับ
// ให้ชื่อที่มีความหมายแก่พวกเขา
destWorkbook.getWorksheets().get(0).setName(sourceFile1 + " - Jan");
destWorkbook.getWorksheets().get(1).setName(sourceFile2 + " - Jul");

// บันทึกไฟล์ปลายทาง
destWorkbook.save("C:\\Files\\CombinedSpecificSheetsInFile.xlsx");
รวมแผ่นงานเฉพาะของไฟล์ Excel หลายไฟล์เป็นหนึ่งเดียวโดยใช้ Java

รวมแผ่นงานเฉพาะของไฟล์ Excel หลายไฟล์เป็นหนึ่งเดียวโดยใช้ Java

วิธีการคุณสมบัติ getWorksheets() ของคลาสสมุดงานจะส่งคืนชุดของแผ่นงานทั้งหมดในสมุดงาน คุณสามารถเพิ่มเวิร์กชีทลงในคอลเลกชันของเวิร์กชีทได้โดยใช้เมธอด add()

คลาส แผ่นงาน ของ API นี้แสดงถึงแผ่นงานเดียว มีคุณสมบัติและวิธีการมากมายในการทำงานกับเวิร์กชีต เมธอด copy() ของคลาสนี้จะคัดลอกเนื้อหาและรูปแบบจากแผ่นงานอื่น คลาสแผ่นงานยังมีวิธีการ get() เพื่อรับแผ่นงานเฉพาะตามดัชนีหรือตามชื่อ วิธีการคุณสมบัติ setName() ตั้งชื่อแผ่นงาน

Java ผสานหลายแผ่นงานเป็นแผ่นงานเดียว

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

  • สร้างอินสแตนซ์ของคลาส สมุดงาน สำหรับไฟล์ต้นฉบับ
  • เพิ่มแผ่นงานใหม่โดยใช้วิธี add()
  • วนซ้ำเวิร์กชีตต้นฉบับและทำสิ่งต่อไปนี้:
    • สร้างช่วงของเซลล์และคอลัมน์สำหรับแผ่นงานเดียวโดยใช้เมธอด createRange()
    • คัดลอกข้อมูลจากช่วงต้นทางไปยังช่วงปลายทางโดยใช้เมธอด copy()
  • บันทึกไฟล์เอาต์พุตโดยการเรียกเมธอด save() ของคลาส Workbook

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการผสานแผ่นงานหลายแผ่นให้เป็นแผ่นงานเดียวโดยใช้ Java

// เปิดไฟล์ Excel ที่มีแผ่นงาน:
// ม.ค. ก.พ. มี.ค. และเม.ย
Workbook workbook = new Workbook("C:\\Files\\Quarter_1.xlsx");

// เพิ่มแผ่นงานชื่อ Summary_sheet
Worksheet summarySheet = workbook.getWorksheets().add("Summary_sheet");

// วนซ้ำเวิร์กชีตต้นฉบับเพื่อคัดลอกข้อมูลไปยัง
// แผ่นงานสรุป
String[] nameOfSourceWorksheets = { "Jan", "Feb", "Mar", "Apr" };
int totalRowCount = 0;

for (String sheetName : nameOfSourceWorksheets)
{
  // รับใบงาน
    Worksheet sourceSheet = workbook.getWorksheets().get(sheetName);

    Range sourceRange = null;
    Range destRange = null;

    // ในกรณีของเวิร์กชีตเดือนมกราคม ให้รวมแถวและคอลัมน์ทั้งหมด
    if (sheetName.equals("Jan"))
    {
        sourceRange = sourceSheet.getCells().getMaxDisplayRange();

        destRange = summarySheet.getCells().createRange(
                sourceRange.getFirstRow() + totalRowCount,
                sourceRange.getFirstColumn(),
                sourceRange.getRowCount(),
                sourceRange.getColumnCount());
    }
    // ในกรณีใบงานอื่นๆ
    // ไม่รวมแถวแรก (ซึ่งมีส่วนหัว)
    else
    {
        int mdatarow = sourceSheet.getCells().getMaxDataRow(); // Zero-based
        int mdatacol = sourceSheet.getCells().getMaxDataColumn(); // Zero-based
        sourceRange = sourceSheet.getCells().createRange(0 + 1, 0, mdatarow, mdatacol + 1);

        destRange = summarySheet.getCells().createRange(
                sourceRange.getFirstRow() + totalRowCount -1,
                sourceRange.getFirstColumn(),
                sourceRange.getRowCount(),
                sourceRange.getColumnCount());
    }

    // คัดลอกข้อมูล การจัดรูปแบบ การวาดวัตถุ ฯลฯ จาก
    // ช่วงต้นทางถึงช่วงปลายทาง
    destRange.copy(sourceRange);
    totalRowCount = sourceRange.getRowCount() + totalRowCount;
}

// บันทึกสมุดงาน 
workbook.save("C:\\Files\\Summarized.xlsx");
รวมแผ่นงานหลายแผ่นเป็นแผ่นงานเดียวโดยใช้ Java

รวมแผ่นงานหลายแผ่นเป็นแผ่นงานเดียวโดยใช้ Java

เมธอดคุณสมบัติ getCells() ของคลาสเวิร์กชีตจัดเตรียมการรวบรวมเซลล์ที่มีอยู่ในเวิร์กชีท คลาส Cells ของ API แสดงถึงคอลเลกชันของออบเจ็กต์ที่เกี่ยวข้องกับเซลล์ เช่น Cell, Row เป็นต้น คุณสมบัติ getMaxDisplayRange() วิธีการของคลาส Cells จะให้ช่วงสูงสุดซึ่งรวมถึงข้อมูล เซลล์ที่ผสาน และรูปร่าง คลาส Range แสดงถึงช่วงของเซลล์ภายในสเปรดชีต

คลาส Cells มีวิธีการต่อไปนี้เพื่อสร้างช่วงของเซลล์:

  • createRange(int firstIndex, int number, boolean isVertical) เพื่อสร้างวัตถุ Range จากแถวของเซลล์หรือคอลัมน์ของเซลล์
  • createRange(int firstRow, int firstColumn, int TotalRows, int TotalColumns) วิธีการสร้างวัตถุ Range จากช่วงของเซลล์
  • เมธอด createRange(java.lang.String address) สร้างอ็อบเจ็กต์ Range จากที่อยู่ของช่วง
  • เมธอด createRange(java.lang.String upperLeftCell, java.lang.String lowerRightCell) จะสร้างอ็อบเจ็กต์ Range จากช่วงของเซลล์

เมธอด copy() ของคลาส Range จะคัดลอกข้อมูลทุกประเภท (รวมถึงสูตร) การจัดรูปแบบ วัตถุการวาด ฯลฯ จากช่วงต้นทางไปยังช่วงปลายทาง

รวมคอลัมน์ของแผ่นงานหลายแผ่นไว้ในที่เดียวโดยใช้ Java

คุณสามารถรวมคอลัมน์ของแผ่นงานหลายแผ่นลงในแผ่นงานเดียวโดยทางโปรแกรมได้โดยทำตามขั้นตอนด้านล่าง:

  • สร้างอินสแตนซ์ของคลาส สมุดงาน สำหรับไฟล์ต้นฉบับ
  • เพิ่มแผ่นงานใหม่โดยใช้วิธี add()
  • วนซ้ำเวิร์กชีตต้นฉบับและทำสิ่งต่อไปนี้:
    • คัดลอกคอลัมน์ทั้งหมดทีละคอลัมน์โดยใช้เมธอด copyColumn() พร้อมเซลล์แผ่นงานต้นทางและดัชนีคอลัมน์
  • บันทึกไฟล์เอาต์พุตโดยการเรียกเมธอด save() ของคลาส Workbook

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการรวมคอลัมน์ของแผ่นงานหลายแผ่นให้เป็นแผ่นงานเดียวโดยใช้ Java

// เปิดสมุดงาน
Workbook workbook = new Workbook("C:\\Files\\sample.xlsx");

// เพิ่มแผ่นงานชื่อ Summary_sheet
Worksheet summarySheet = workbook.getWorksheets().add("Summary_sheet");

// วนซ้ำแผ่นงานเพื่อคัดลอกคอลัมน์ไปยัง
// แผ่นงานสรุป
String[] nameOfSourceWorksheets = { "Products", "Sales", "Customers" };
int totalCol = 0; 

for (String sheetName : nameOfSourceWorksheets) {
  Worksheet sourceSheet = workbook.getWorksheets().get(sheetName);

  if (sheetName.equals("Products")) {
    // รับคอลเลกชันคอลัมน์แผ่นงาน
    ColumnCollection columns = sourceSheet.getCells().getColumns();

    // คัดลอกคอลัมน์ไปยัง summaySheet
   for (Column column : (Iterable<Column>) columns)
    {
      summarySheet.getCells().copyColumn(sourceSheet.getCells(), column.getIndex(), totalCol);
      totalCol = totalCol + 1;
    }
    }
  else {
    // รับคอลเลกชันคอลัมน์แผ่นงาน
    ColumnCollection columns = sourceSheet.getCells().getColumns();

    // คัดลอกคอลัมน์ไปยัง summaySheet
   for (Column column : (Iterable<Column>) columns)
    {
      summarySheet.getCells().copyColumn(sourceSheet.getCells(), column.getIndex(), totalCol);
      totalCol = totalCol + 1;
    }
  }
}

// บันทึกไฟล์ Excel
workbook.save("C:\\Files\\CopyingColumns_out.xlsx");
รวมคอลัมน์ของแผ่นงานหลายแผ่นไว้ในที่เดียวโดยใช้ Java

รวมคอลัมน์ของแผ่นงานหลายแผ่นไว้ในที่เดียวโดยใช้ Java

เมธอดคุณสมบัติ getColumns() ของคลาส Cells จัดเตรียมการรวบรวมคอลัมน์ที่มีอยู่ในเวิร์กชีต คลาส ColumnCollection แสดงถึงคอลเลกชันของแต่ละคอลัมน์ในเวิร์กชีต ในขณะที่คลาส Column แสดงถึงคอลัมน์เดียวในเวิร์กชีต

เมธอด copyColumn() ของคลาส Cells จะคัดลอกข้อมูลและรูปแบบของคอลัมน์ทั้งหมด คลาส Cells ยังมีเมธอด copyColumn() ที่โอเวอร์โหลดเพื่อคัดลอกข้อมูลด้วย PasteOptions หมายเลขคอลัมน์ คอลัมน์ผลรวมต้นทางและปลายทาง ฯลฯ

รับใบอนุญาตฟรี

คุณสามารถลองใช้ API ได้โดยไม่มีข้อจำกัดในการประเมินโดยขอ ใบอนุญาตชั่วคราวฟรี

บทสรุป

ในบทความนี้ คุณได้เรียนรู้วิธีรวมไฟล์ Excel หลายไฟล์เป็นไฟล์เดียวแล้ว คุณยังได้เรียนรู้วิธีการรวมแผ่นงานเฉพาะของไฟล์ Excel หลายไฟล์โดยใช้ Java นอกจากนี้ คุณได้เรียนรู้วิธีผสานแผ่นงานหลายแผ่นให้เป็นแผ่นงานเดียวโดยทางโปรแกรม บทความนี้ยังอธิบายวิธีการรวมคอลัมน์ของแผ่นงานหลายแผ่นให้เป็นแผ่นเดียวโดยใช้ Java คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ Aspose.Cells for Java API ได้โดยใช้ เอกสารประกอบ ในกรณีที่มีความคลุมเครือ โปรดติดต่อเราที่ ฟอรั่ม

ดูสิ่งนี้ด้วย