Hur man jämför XLSX-filer i C# med strömmar – Komplett guide

Att jämföra Excel‑kalkylblad manuellt är tidskrävande och felbenäget, särskilt när du behöver validera stora finansiella rapporter eller granska datamängder. I den här handledningen kommer du att upptäcka how to compare xlsx‑filer effektivt med GroupDocs.Comparison för .NET med ström‑baserad bearbetning. Vi går igenom varje steg, förklarar varför strömmar är viktiga och ger dig praktiska tips som du kan kopiera till dina egna projekt.

Snabba svar

  • Vilket bibliotek hanterar Excel‑jämförelse? GroupDocs.Comparison för .NET.
  • Kan jag jämföra filer utan att spara dem på disk? Ja—använd strömmar för att arbeta direkt med data i minnet.
  • Krävs en licens för produktion? En kommersiell licens är obligatorisk; en gratis provversion finns tillgänglig.
  • Vilka .NET‑versioner stöds? .NET Framework 4.5+, .NET Core 3.1+, .NET 5/6/7.
  • Hur många Excel‑format täcks? Över 20, inklusive .xls, .xlsx, .xlsm och .csv.

Vad är “how to compare xlsx”?

“How to compare xlsx” avser att programatiskt upptäcka skillnader mellan två Excel‑arbetsboksfiler. GroupDocs.Comparison för .NET läser varje arbetsbok, utvärderar cell‑nivå förändringar och genererar ett markerat resultatsdokument som visar insättningar, borttagningar och ändringar. Jämförelsen markerar ändrade celler, rader och blad, vilket gör det enkelt att granska skillnaderna på ett ögonblick.

Varför använda ström‑baserad jämförelse?

Ström‑bearbetning minskar minnesbelastningen genom att läsa filer i bitar istället för att ladda hela arbetsboken i RAM. GroupDocs.Comparison kan hantera 50 + in‑ och utdataformat och bearbeta flerhundratals‑sidiga kalkylblad samtidigt som toppminnesanvändningen hålls under 100 MB på vanlig serverhårdvara. Detta gör det idealiskt för webbtjänster, mikrotjänster och lokala batch‑jobb.

Förutsättningar

  1. GroupDocs.Comparison för .NET – ladda ner från den officiella webbplatsen here.
  2. C#‑utvecklingsmiljö – Visual Studio 2022 eller någon IDE som stöder .NET 6+.
  3. Excel‑filer – två .xlsx‑arbetsböcker du vill jämföra.
  4. Grundläggande förståelse för strömmarSystem.IO.Stream‑koncept används genom hela exemplet.

Importera namnrymder

Följande namnrymder ger dig åtkomst till jämförelsesmotorn och strömutrymmen.

Namnrymden GroupDocs.Comparison innehåller de centrala jämförelsklasserna, medan System.IO tillhandahåller typerna FileStream och MemoryStream som behövs för strömhantering.

Steg‑för‑steg implementationsguide

Hur påverkar användning av strömmar prestandan?

Läs in varje arbetsbok med File.OpenRead() och skicka den resulterande strömmen direkt till jämförare. Detta tillvägagångssätt undviker temporära filer, minskar I/O‑tiden med upp till 30 % på SSD‑lagring och håller processen helt i minnet, vilket är avgörande för hög‑genomströmning web‑API:er.

Steg 1: Initiera utdata‑variabler

Definiera var jämförelsens resultat ska lagras. Att använda Path.Combine() garanterar korrekt katalogseparator på Windows, Linux eller macOS.

Proffstips: I produktion, skriv utdata till en temporär mapp eller ett molnlagrings‑bucket för att hålla applikationskatalogen ren.

Steg 2: Skapa Comparer‑objekt

Comparer‑klassen är den centrala komponenten som orkestrerar jämförelsen av två eller fler dokument.

Skapa en Comparer‑instans genom att öppna källarbetsboken med File.OpenRead(). using‑satsen garanterar att filströmmen stängs automatiskt, vilket förhindrar läckage av filhandtag.

Steg 3: Lägg till mål‑dokument

Lägg till den andra arbetsboken till jämförare. Du kan kedja ytterligare mål om du behöver jämföra en huvudfil mot flera varianter—användbart för regional rapportering eller versionskontroll‑scenarier.

Steg 4: Utför jämförelse

Anropa Compare‑metoden för att generera diff‑dokumentet. Resultatet skrivs till en ny ström skapad med File.Create(). Utdatafilen markerar alla ändrade celler, rader och blad, vilket gör den visuella granskningen enkel.

Compare‑metoden utför jämförelsen och returnerar resultatsdokumentet som en ström.

Steg 5: Visa framgångsmeddelande

När jämförelsen är klar, logga ett kortfattat framgångsmeddelande som inkluderar sökvägen till utdata. I ett verkligt API skulle du returnera strömmen till anroparen eller lagra den i molnlagring för senare hämtning.

Vanliga problem och felsökning

  • File‑in‑use‑fel: Se till att ingen annan process (inklusive Excel) har filen öppen. Strömmar öppnade med File.OpenRead() får ett skrivskyddat delningslås, vilket minskar de flesta konflikter.
  • Minnesökningar med stora filer: För arbetsböcker som överstiger 100 MB, aktivera flaggan ComparerOptionsEnableMemoryOptimization (om tillgänglig) och övervaka processens privata minne.
  • Blandade formatjämförelser: GroupDocs.Comparison stöder konsekventa formatpar; undvik att jämföra en .xls‑fil med en .xlsx‑fil i samma operation för att förhindra layout‑mismatchar.
  • Strömpositionering: När du återanvänder en ström, återställ alltid den med stream.Seek(0, SeekOrigin.Begin) innan du skickar den till jämförare.

Robust felhantering: Fånga ComparisonException för korrupta arbetsböcker och logga filnamnet för senare undersökning.
ComparisonException kastas av GroupDocs.Comparison när inmatningsdokumentet är korrupt eller använder ett ej stödd format.

Prestanda och bästa praxis

  • Stäng strömmar omedelbart: Omslut varje FileStream i ett using‑block.
  • Batch‑bearbetning: Använd Parallel.ForEach med async‑jämförare för att hantera flera filpar samtidigt, men begränsa parallelliteten för att undvika CPU‑överbelastning.
  • Robust felhantering: Fånga ComparisonException för korrupta arbetsböcker och logga filnamnet för senare undersökning.
  • Validera inmatningsströmmar: Verifiera MIME‑typen eller filhuvudet innan jämförelse för att tidigt avvisa icke‑Excel‑uppladdningar.

ComparerOptions tillhandahåller konfigurationsinställningar för jämförelseprocessen, såsom minnesoptimering och känslighetskontroller.

Avancerade användningsscenarier

  • Database BLOB‑jämförelse: Hämta Excel‑BLOB från SQL Server, omslut den i en MemoryStream och skicka den direkt till jämförare—inga temporära filer behövs.
  • Molnlagringsintegration: Använd Azure Blob Storage SDK för att få en BlobStream och skicka den till jämförare, vilket möjliggör helt serverlösa arbetsflöden.
  • Realtime‑API‑endpoint: Exponera en POST‑endpoint som accepterar två multipart/form‑data‑filer, jämför dem i realtid och returnerar diffen som en nedladdningsbar ström.

Slutsats

Genom att utnyttja GroupDocs.Comparisons ström‑baserade API får du ett minnes‑effektivt, säkert och skalbart sätt att jämföra XLSX‑filer i C#. Denna guide täckte allt från installation till avancerade molnscenarier och ger dig en solid grund för att integrera kalkylbladsjämförelse i vilken .NET‑lösning som helst.

Vanliga frågor

Q: Är GroupDocs.Comparison för .NET kompatibel med alla Excel‑format?
A: Ja, den stöder över 20 Excel‑relaterade format, inklusive .xls, .xlsx, .xlsm och .csv, vilket säkerställer bred kompatibilitet över både äldre och moderna arbetsböcker.

Q: Kan jag anpassa den visuella stilen på jämförelsens resultat?
A: Absolut. API‑et låter dig sätta markeringsfärger, ändra kantstil och justera känslighetsnivån för förändringar via ComparisonOptions.

Q: Behöver jag en kommersiell licens för produktionsanvändning?
A: En giltig GroupDocs.Comparison‑licens krävs för alla kommersiella distributioner. Du kan skaffa en here.

Q: Finns en gratis provversion?
A: Ja, du kan ladda ner en fullt funktionell provversion here för att utvärdera alla funktioner innan du köper.

Q: Var kan jag få community‑support?
A: GroupDocs.Comparison‑forumet here är en aktiv plats för att ställa frågor och dela lösningar med andra utvecklare.


Senast uppdaterad: 2026-06-21
Testad med: GroupDocs.Comparison 23.10 för .NET
Författare: 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}.");

Relaterade handledningar