W tym artykule dowiesz się, jak kopiować arkusze z wielu skoroszytów programu Excel do jednego skoroszytu przy użyciu języka C#. Dowiesz się także jak skopiować dane z kilku arkuszy do jednego arkusza. Zaczynajmy.

API C# do łączenia wielu plików Excel

Aspose.Cells for .NET to dobrze znany interfejs API do manipulacji arkuszami kalkulacyjnymi, który umożliwia tworzenie i przetwarzanie plików Excel z poziomu aplikacji .NET. Możesz pobrać pliki binarne interfejsu API lub zainstalować go za pomocą NuGet.

PM> Install-Package Aspose.Cells

Połącz wiele plików Excel w jeden za pomocą C#

Czasami trzeba połączyć wiele plików Excel w jeden plik. Chcesz skopiować arkusze ze skoroszytów źródłowych do skoroszytu docelowego, jak pokazano poniżej. Dokumenty Excel mogą mieć dowolną wersję, np. Excel 97, Excel 2010 lub Excel 2016.

Połącz wiele plików Excel w jeden za pomocą C#

Ryc. 1: Połącz pliki Excel

Poniższy przykładowy kod pokazuje, jak połączyć wiele plików programu Excel w jeden przy użyciu języka C#.

// Otwórz pierwszy plik Excela.
Workbook SourceBook1 = new Workbook("Excel A.xlsx");

// Otwórz drugi plik Excela.
Workbook SourceBook2 = new Workbook("Excel B.xlsx");

// Otwórz trzeci plik Excela.
Workbook SourceBook3 = new Workbook("Excel C.xlsx");

// Skopiuj arkusze drugiego pliku Excel do pierwszego skoroszytu.
SourceBook1.Combine(SourceBook2);

// Skopiuj arkusze trzeciego pliku Excel do pierwszego skoroszytu.
SourceBook1.Combine(SourceBook3);

// Zapisz zaktualizowany pierwszy plik Excela jako nowy plik.
SourceBook1.Save("CombinedFile.xlsx");

Połącz określone arkusze plików Excel za pomocą języka C#

Powyższy kod kopiuje wszystkie arkusze z plików źródłowych do pliku docelowego. Możesz jednak skopiować określone arkusze z plików źródłowych do pliku docelowego. Na przykład masz dwa pliki Excel, a każdy z nich zawiera trzy arkusze o nazwach Sprzedaż, Pracownicy i Wydatki. Chcesz tylko skopiować arkusz sprzedaży z obu plików do pliku docelowego, jak pokazano na poniższym rysunku.

Połącz określone arkusze plików Excel za pomocą języka C#

Ryc. 2: Połącz określone arkusze plików Excel

Poniższy przykładowy kod pokazuje, jak połączyć określone arkusze plików źródłowych z plikiem docelowym przy użyciu języka C#.

// Otwórz plik Excela A.
Workbook excelA = new Workbook("Excel A.xlsx");

// Otwórz plik Excela B.
Workbook excelB = new Workbook("Excel B.xlsx");

// Utwórz docelowy skoroszyt.
Workbook destWorkbook = new Workbook();
// Do Skoroszytu domyślnie dodawany jest pierwszy arkusz. Dodaj drugi arkusz.
destWorkbook.Worksheets.Add();

// Skopiuj arkusz sprzedaży pliku Excel A do pliku docelowego.
destWorkbook.Worksheets[0].Copy(excelA.Worksheets["Sales"]);

// Skopiuj arkusz sprzedaży pliku Excel B do pliku docelowego.
destWorkbook.Worksheets[1].Copy(excelB.Worksheets["Sales"]);

// Domyślne nazwy arkuszy to odpowiednio „Arkusz1" i „Arkusz2".
// Nadajmy im znaczące nazwy.
destWorkbook.Worksheets[0].Name = excelA.FileName + " - Sales";
destWorkbook.Worksheets[1].Name = excelB.FileName + " - Sales";

// Zapisz plik docelowy.
destWorkbook.Save("CombinedFile.xlsx");

Połącz wiele arkuszy w jeden za pomocą języka C#

Czasami trzeba skopiować dane z kilku arkuszy do jednego arkusza. Na przykład masz kilka arkuszy w pliku Excel zawierających informacje o różnych produktach i chcesz połączyć te arkusze w jeden arkusz podsumowujący, w następujący sposób:

Połącz wiele arkuszy w jeden za pomocą języka C#

Ryc. 3: Połącz wiele arkuszy w jeden

Poniższy fragment kodu pokazuje, jak skopiować dane z kilku arkuszy do jednego arkusza przy użyciu języka C#.

// Otwórz plik Excel zawierający arkusze:
// Produkty1, Produkty2 i Produkty3
Workbook workbook = new Workbook("Products.xlsx");

// Dodaj arkusz o nazwie Arkusz_podsumowania
Worksheet summarySheet = workbook.Worksheets.Add("Summary_sheet");

// Iteruj po arkuszach źródłowych, których dane chcesz skopiować do pliku
// arkusz podsumowujący
string[] nameOfSourceWorksheets = { "Products1", "Products2", "Products3" };
int totalRowCount = 0;

foreach (string sheetName in nameOfSourceWorksheets)
{
    Worksheet sourceSheet = workbook.Worksheets[sheetName];

    Range sourceRange;
    Range destRange;
    // W przypadku arkusza Produkty1 uwzględnij wszystkie wiersze i kolumny.
    if (sheetName.Equals("Products1"))
    {
        sourceRange = sourceSheet.Cells.MaxDisplayRange;
        
        destRange = summarySheet.Cells.CreateRange(
                sourceRange.FirstRow + totalRowCount,
                sourceRange.FirstColumn,
                sourceRange.RowCount,
                sourceRange.ColumnCount);
    }
    // W przypadku arkuszy Produkty2 i Produkty3,
    // wyklucz pierwszy wiersz (który zawiera nagłówki).
    else
    {
        int mdatarow = sourceSheet.Cells.MaxDataRow; // Zero-based
        int mdatacol = sourceSheet.Cells.MaxDataColumn; // Zero-based
        sourceRange = sourceSheet.Cells.CreateRange(0 + 1, 0, mdatarow, mdatacol + 1);

        destRange = summarySheet.Cells.CreateRange(
                sourceRange.FirstRow + totalRowCount -1,
                sourceRange.FirstColumn,
                sourceRange.RowCount,
                sourceRange.ColumnCount);
    }

    // Kopiuje dane, formatowanie, obiekty rysunkowe itp. z pliku
    // zakres źródłowy do zakresu docelowego.
    destRange.Copy(sourceRange);
    totalRowCount = sourceRange.RowCount + totalRowCount;
}

// Zapisz skoroszyt 
workbook.Save("Summarized.xlsx");

Wniosek

W tym artykule nauczyłeś się programowo łączyć wiele plików Excel w jeden. Możesz skopiować wszystkie arkusze z pliku źródłowego lub wybrane arkusze do pliku docelowego. Nauczyłeś się także, jak łączyć dane z wielu arkuszy w jeden arkusz. Aby uzyskać więcej informacji, sprawdź dokumentację Aspose.Cells for .NET. Jeśli masz jakieś pytania, możesz je zadać na naszym Forum pomocy technicznej. Odpowiemy na nie w ciągu kilku godzin.

Zobacz też