วิธีเปรียบเทียบไฟล์ XLSX ใน C# ด้วย Streams – คู่มือฉบับสมบูรณ์
การเปรียบเทียบสเปรดชีต Excel ด้วยตนเองเป็นงานที่น่าเบื่อและเสี่ยงต่อข้อผิดพลาด, โดยเฉพาะเมื่อคุณต้องตรวจสอบรายงานการเงินขนาดใหญ่หรือชุดข้อมูลการตรวจสอบ. ในบทเรียนนี้คุณจะค้นพบ วิธีเปรียบเทียบ xlsx อย่างมีประสิทธิภาพด้วย GroupDocs.Comparison สำหรับ .NET โดยใช้การประมวลผลแบบ stream. เราจะเดินผ่านทุกขั้นตอน, อธิบายว่าทำไม streams ถึงสำคัญ, และให้เคล็ดลับที่คุณสามารถคัดลอกไปใช้ในโครงการของคุณได้.
คำตอบสั้น
- ไลบรารีใดที่จัดการการเปรียบเทียบ Excel? GroupDocs.Comparison for .NET.
- ฉันสามารถเปรียบเทียบไฟล์โดยไม่ต้องบันทึกลงดิสก์ได้หรือไม่? Yes—use streams to work directly with in‑memory data.
- ต้องการใบอนุญาตสำหรับการใช้งานจริงหรือไม่? A commercial license is mandatory; a free trial is available.
- เวอร์ชัน .NET ที่รองรับคืออะไร? .NET Framework 4.5+, .NET Core 3.1+, .NET 5/6/7.
- มีรูปแบบ Excel กี่แบบที่รองรับ? Over 20, including .xls, .xlsx, .xlsm, and .csv.
“how to compare xlsx” คืออะไร?
“How to compare xlsx” หมายถึงการตรวจจับความแตกต่างระหว่างไฟล์เวิร์กบุ๊ก Excel สองไฟล์โดยโปรแกรม. GroupDocs.Comparison สำหรับ .NET อ่านแต่ละเวิร์กบุ๊ก, ประเมินการเปลี่ยนแปลงระดับเซลล์, และสร้างเอกสารผลลัพธ์ที่ไฮไลท์ซึ่งแสดงการแทรก, การลบ, และการแก้ไข. การเปรียบเทียบจะไฮไลท์เซลล์, แถว, และชีตที่เปลี่ยนแปลง, ทำให้การตรวจสอบความแตกต่างเป็นเรื่องง่าย.
ทำไมต้องใช้การเปรียบเทียบแบบ stream‑based?
การประมวลผลแบบ Stream ลดความกดดันของหน่วยความจำโดยอ่านไฟล์เป็นชิ้นส่วนแทนการโหลดเวิร์กบุ๊กทั้งหมดเข้า RAM. GroupDocs.Comparison สามารถจัดการ 50 + รูปแบบอินพุตและเอาต์พุต และประมวลผล สเปรดชีตหลายร้อยหน้า ในขณะที่รักษาการใช้หน่วยความจำสูงสุดต่ำกว่า 100 MB บนฮาร์ดแวร์เซิร์ฟเวอร์ทั่วไป. สิ่งนี้ทำให้เหมาะสำหรับบริการเว็บ, ไมโครเซอร์วิส, และงานแบตช์บนเครื่อง.
ข้อกำหนดเบื้องต้น
- GroupDocs.Comparison for .NET – ดาวน์โหลดจากเว็บไซต์อย่างเป็นทางการ here.
- C# development environment – Visual Studio 2022 หรือ IDE ใด ๆ ที่รองรับ .NET 6+.
- Excel files – เวิร์กบุ๊ก
.xlsxสองไฟล์ที่คุณต้องการเปรียบเทียบ. - Basic understanding of streams – แนวคิด
System.IO.Streamถูกใช้ตลอดตัวอย่าง.
นำเข้า Namespaces
Namespaces ต่อไปนี้ให้คุณเข้าถึงเอนจินการเปรียบเทียบและยูทิลิตี้ของ stream.
Namespace GroupDocs.Comparison มีคลาสการเปรียบเทียบหลัก, ส่วน System.IO ให้ประเภท FileStream และ MemoryStream ที่จำเป็นสำหรับการจัดการ stream.
คู่มือการดำเนินการแบบ Step‑by‑Step
การใช้ streams มีผลต่อประสิทธิภาพอย่างไร?
โหลดแต่ละเวิร์กบุ๊กด้วย File.OpenRead() และส่ง stream ที่ได้โดยตรงไปยัง comparer. วิธีนี้หลีกเลี่ยงไฟล์ชั่วคราว, ลดเวลา I/O ได้ถึง 30 % บน SSD, และทำให้กระบวนการทำงานทั้งหมดในหน่วยความจำ, ซึ่งสำคัญสำหรับเว็บ API ที่มีการส่งข้อมูลสูง.
ขั้นตอนที่ 1: เริ่มต้นตัวแปรผลลัพธ์
กำหนดตำแหน่งที่ผลลัพธ์การเปรียบเทียบจะถูกจัดเก็บ. การใช้ Path.Combine() รับประกันตัวคั่นไดเรกทอรีที่ถูกต้องบน Windows, Linux, หรือ macOS.
Pro Tip: ในการผลิต, ให้เขียนผลลัพธ์ไปยังโฟลเดอร์ชั่วคราวหรือ bucket ของคลาวด์เพื่อให้ไดเรกทอรีของแอปพลิเคชันสะอาด.
ขั้นตอนที่ 2: สร้างอ็อบเจ็กต์ Comparer
คลาส Comparer เป็นส่วนสำคัญที่ประสานการเปรียบเทียบของเอกสารสองหรือหลายไฟล์.
สร้างอินสแตนซ์ Comparer โดยเปิดเวิร์กบุ๊กต้นทางด้วย File.OpenRead(). คำสั่ง using รับประกันว่า stream ของไฟล์จะถูกปิดโดยอัตโนมัติ, ป้องกันการรั่วของ file‑handle.
ขั้นตอนที่ 3: เพิ่มเอกสารเป้าหมาย
เพิ่มเวิร์กบุ๊กที่สองเข้าไปใน comparer. คุณสามารถต่อ chain เอกสารเป้าหมายเพิ่มเติมได้หากต้องการเปรียบเทียบไฟล์หลักหนึ่งไฟล์กับหลายเวอร์ชัน—เป็นประโยชน์สำหรับการรายงานตามภูมิภาคหรือสถานการณ์ version‑control.
ขั้นตอนที่ 4: ดำเนินการเปรียบเทียบ
เรียกใช้เมธอด Compare เพื่อสร้างเอกสาร diff. ผลลัพธ์จะถูกเขียนไปยัง stream ใหม่ที่สร้างด้วย File.Create(). ไฟล์ผลลัพธ์จะไฮไลท์เซลล์, แถว, และชีตที่เปลี่ยนแปลงทั้งหมด, ทำให้การตรวจสอบภาพง่ายขึ้น.
เมธอด Compare ทำการเปรียบเทียบและคืนเอกสารผลลัพธ์เป็น stream.
ขั้นตอนที่ 5: แสดงข้อความสำเร็จ
หลังจากการเปรียบเทียบเสร็จสิ้น, ให้บันทึกข้อความสำเร็จสั้น ๆ ที่รวมเส้นทางผลลัพธ์. ใน API จริง, คุณจะคืน stream ให้ผู้เรียกหรือเก็บไว้ในคลาวด์สตอเรจเพื่อดึงภายหลัง.
ปัญหาทั่วไปและการแก้ไขปัญหา
- File‑in‑use errors: ตรวจสอบว่าไม่มีโปรเซสอื่น (รวมถึง Excel) เปิดไฟล์อยู่. Streams ที่เปิดด้วย
File.OpenRead()จะรับ lock แบบอ่าน‑อย่างเดียว, ซึ่งช่วยลดความขัดแย้งส่วนใหญ่. - Memory spikes with huge files: สำหรับเวิร์กบุ๊กที่ใหญ่กว่า 100 MB, เปิดใช้งานแฟล็ก
ComparerOptionsEnableMemoryOptimization(ถ้ามี) และตรวจสอบหน่วยความจำส่วนตัวของโปรเซส. - Mixed format comparisons: GroupDocs.Comparison รองรับการเปรียบเทียบรูปแบบที่สอดคล้องกัน; หลีกเลี่ยงการเปรียบเทียบไฟล์
.xlsกับไฟล์.xlsxในการทำงานเดียวเพื่อป้องกันการไม่ตรงของเลย์เอาต์. - Stream positioning: เมื่อใช้ stream ซ้ำ, ควรรีเซ็ตด้วย
stream.Seek(0, SeekOrigin.Begin)ก่อนส่งให้ comparer.
Robust error handling: จับ ComparisonException สำหรับเวิร์กบุ๊กที่เสียหายและบันทึกชื่อไฟล์เพื่อการสืบค้นภายหลัง.ComparisonException ถูกโยนโดย GroupDocs.Comparison เมื่อเอกสารอินพุตเสียหายหรือใช้รูปแบบที่ไม่รองรับ.
ประสิทธิภาพและแนวทางปฏิบัติที่ดีที่สุด
- Dispose streams promptly: ห่อ
FileStreamทุกตัวในบล็อกusing. - Batch processing: ใช้
Parallel.ForEachกับ async comparers เพื่อจัดการหลายคู่ไฟล์พร้อมกัน, แต่จำกัดระดับการขนานเพื่อหลีกเลี่ยงการใช้ CPU มากเกินไป. - Robust error handling: จับ
ComparisonExceptionสำหรับเวิร์กบุ๊กที่เสียหายและบันทึกชื่อไฟล์เพื่อการสืบค้นภายหลัง. - Validate input streams: ตรวจสอบ MIME type หรือ header ของไฟล์ก่อนการเปรียบเทียบเพื่อปฏิเสธไฟล์อัปโหลดที่ไม่ใช่ Excel ตั้งแต่ต้น.
ComparerOptions ให้การตั้งค่าการกำหนดค่าต่าง ๆ สำหรับกระบวนการเปรียบเทียบ, เช่น การเพิ่มประสิทธิภาพหน่วยความจำและการควบคุมความอ่อนไหว.
สถานการณ์การใช้งานขั้นสูง
- Database BLOB comparison: ดึง Excel BLOB จาก SQL Server, ห่อใน
MemoryStream, และส่งตรงไปยัง comparer—ไม่ต้องใช้ไฟล์ชั่วคราว. - Cloud storage integration: ใช้ Azure Blob Storage SDK เพื่อรับ
BlobStreamและส่งให้ comparer, ทำให้เวิร์กโฟลว์แบบ serverless สมบูรณ์. - Real‑time API endpoint: เปิดเผย endpoint แบบ POST ที่รับไฟล์ multipart/form‑data สองไฟล์, เปรียบเทียบแบบเรียลไทม์, และคืน diff เป็น stream ที่ดาวน์โหลดได้.
สรุป
โดยการใช้ API แบบ stream ของ GroupDocs.Comparison, คุณจะได้วิธีเปรียบเทียบไฟล์ XLSX ใน C# ที่ ประหยัดหน่วยความจำ, ปลอดภัย, และ ขยายได้. คู่มือนี้ครอบคลุมทุกอย่างตั้งแต่การตั้งค่าไปจนถึงสถานการณ์คลาวด์ขั้นสูง, ให้พื้นฐานที่มั่นคงสำหรับการรวมการเปรียบเทียบสเปรดชีตเข้าไปในโซลูชัน .NET ใด ๆ.
คำถามที่พบบ่อย
Q: GroupDocs.Comparison for .NET รองรับรูปแบบ Excel ทั้งหมดหรือไม่?
A: ใช่, รองรับรูปแบบที่เกี่ยวข้องกับ Excel มากกว่า 20 รูปแบบ, รวมถึง .xls, .xlsx, .xlsm, และ .csv, เพื่อความเข้ากันได้กว้างขวางระหว่างเวิร์กบุ๊กเก่าและใหม่.
Q: ฉันสามารถปรับแต่งสไตล์การแสดงผลของผลลัพธ์การเปรียบเทียบได้หรือไม่?
A: แน่นอน. API ให้คุณตั้งค่าสีไฮไลท์, เปลี่ยนสไตล์ขอบ, และปรับระดับความอ่อนไหวของการเปลี่ยนแปลงผ่าน ComparisonOptions.
Q: ฉันต้องการใบอนุญาตเชิงพาณิชย์สำหรับการใช้งานในผลิตภัณฑ์หรือไม่?
A: จำเป็นต้องมีใบอนุญาต GroupDocs.Comparison ที่ถูกต้องสำหรับการใช้งานเชิงพาณิชย์ใด ๆ. คุณสามารถรับได้ here.
Q: มีรุ่นทดลองใช้ฟรีหรือไม่?
A: ใช่, คุณสามารถดาวน์โหลดรุ่นทดลองใช้งานเต็มรูปแบบ here เพื่อประเมินคุณสมบัติทั้งหมดก่อนซื้อ.
Q: ฉันสามารถรับการสนับสนุนจากชุมชนได้จากที่ไหน?
A: ฟอรั่ม GroupDocs.Comparison here เป็นสถานที่ที่มีการเคลื่อนไหวเพื่อถามคำถามและแบ่งปันโซลูชันกับนักพัฒนาคนอื่น.
Last Updated: 2026-06-21
Tested With: GroupDocs.Comparison 23.10 for .NET
Author: GroupDocs
using System;
using System.IO;
string outputDirectory = "Your Document Directory";
string outputFileName = Path.Combine(outputDirectory, "result.xlsx");
using (Comparer comparer = new Comparer(File.OpenRead("source.xlsx")))
comparer.Add(File.OpenRead("target.xlsx"));
comparer.Compare(File.Create(outputFileName));
Console.WriteLine($"\nDocuments compared successfully.\nCheck output in {outputDirectory}.");