Leere Arbeitsblätter mit C++ erkennen

Überprüfung auf belegte Zellen

Arbeitsblätter können mit Werten gefüllt sein, wobei die Werte einfach (Text, Nummern, Datum/Uhrzeit) oder eine Formel oder ein Formel-basierter Wert sein können. In einem solchen Fall ist es einfach zu erkennen, ob ein Arbeitsblatt leer ist oder nicht. Alles, was wir überprüfen müssen, sind die Cells.MaxDataRow oder Cells.MaxDataColumn Eigenschaften. Wenn die genannten Eigenschaften Null oder positive Werte zurückgeben, bedeutet dies, dass ein oder mehrere Zellen gefüllt wurden. Wenn jedoch eine dieser Eigenschaften -1 zurückgibt, deutet dies darauf hin, dass keine der Zellen im Arbeitsblatt gefüllt ist.

Überprüfung auf leere initialisierte Zellen

Alle Zellen mit Werten werden automatisch initialisiert. Es besteht jedoch die Möglichkeit, dass ein Arbeitsblatt Zellen nur mit Formatierung enthält. In einem solchen Szenario geben die Cells.MaxDataRow oder Cells.MaxDataColumn Eigenschaften -1 zurück, was auf das Fehlen von gefüllten Werten hinweist. Initialisierte Zellen aufgrund der Zellformatierung können jedoch mit diesem Ansatz nicht erkannt werden. Um zu überprüfen, ob ein Arbeitsblatt leere initialisierte Zellen enthält, wird empfohlen, die MoveNext-Methode des Enumerationers, der aus der Cells Sammlung gewonnen wurde, zu verwenden. Wenn die MoveNext-Methode true zurückgibt, bedeutet dies, dass mindestens eine initialisierte Zelle im Arbeitsblatt vorhanden ist.

Überprüfung auf Formen

Es ist möglich, dass ein Arbeitsblatt keine gefüllten Zellen enthält, es jedoch Formen & Objekte wie Steuerelemente, Diagramme, Bilder usw. enthalten kann. Wenn wir überprüfen möchten, ob ein Arbeitsblatt eine Form enthält, können wir dies durch Inspektion der ShapeCollection.Count Eigenschaft tun. Ein positiver Wert zeigt die Anwesenheit von Formen im Arbeitsblatt an.

Programmierbeispiel

#include <iostream>
#include "Aspose.Cells.h"

using namespace Aspose::Cells;
using namespace std;

int main()
{
    Aspose::Cells::Startup();

    // Source directory path
    U16String srcDir(u"..\\Data\\01_SourceDirectory\\");

    // Create an instance of Workbook and load an existing spreadsheet
    Workbook book(srcDir + u"sample.xlsx");

    // Loop over all worksheets in the workbook
    WorksheetCollection sheets = book.GetWorksheets();
    for (int i = 0; i < sheets.GetCount(); i++)
    {
        Worksheet sheet = sheets.Get(i);

        // Check if worksheet has populated cells
        if (sheet.GetCells().GetMaxDataRow() != -1)
        {
            cout << sheet.GetName().ToUtf8() << " is not empty because one or more cells are populated" << endl;
        }
        // Check if worksheet has shapes
        else if (sheet.GetShapes().GetCount() > 0)
        {
            cout << sheet.GetName().ToUtf8() << " is not empty because there are one or more shapes" << endl;
        }
        // Check if worksheet has empty initialized cells
        else
        {
            Range range = sheet.GetCells().GetMaxDisplayRange();
            auto rangeIterator = range.GetEnumerator();
            if (rangeIterator.MoveNext())
            {
                cout << sheet.GetName().ToUtf8() << " is not empty because one or more cells are initialized" << endl;
            }
        }
    }

    Aspose::Cells::Cleanup();
    return 0;
}