Finden Sie es, beheben Sie es, validieren Sie es: Ein vollständiger Leitfaden zur Aspose.Cells Cloud Search, Replace & Broken-Link API (.NET / Python / Java / cURL)

“Welches unserer 400 Budget‑Arbeitsmappen sagt immer noch Old Vendor Ltd?” “Ersetzen Sie jeden {{COMPANY}}‑Platzhalter in dieser Vorlage.” “Verweisen noch irgendwelche unserer Berichte auf die Domain, die wir letztes Jahr stillgelegt haben?” — drei sehr unterschiedliche Fragen, eine gemeinsame Antwort: ein REST‑Aufruf, der Tabellenkalkulationen in der Cloud liest und neu schreibt, ohne dass Excel irgendwo installiert ist.

Tabellenkalkulations-Inhalt-Probleme treten in fast jeder datenintensiven Codebasis auf:

  • Inhaltsprüfung — das Auffinden jeder Zelle, Form oder jedes Hyperlinks, die einen veralteten Produktnamen, eine alte Büroadresse oder eine veraltete Rechtseinheit erwähnen;
  • Vorlagen-Rendering — das Befüllen von {{PLACEHOLDER}}‑Tokens über Tabellenblätter hinweg, bevor ein Arbeitsbuch an einen Kunden gesendet wird;
  • Link‑Verfall — Überprüfung, ob die in einem Arbeitsbuch eingebetteten URLs noch aufgelöst werden können, bevor ein Compliance‑ oder Archivierungsauftrag es freigibt;
  • Massenkorrektur — das Korrigieren eines Tippfehlers oder eines falsch geschriebenen Spaltenwerts über Dutzende von Tabellenblättern hinweg oder nur für einen bestimmten Bereich eines einzelnen Blatts.

Die traditionellen Optionen — eine Skriptbibliothek, die auf Ihrem eigenen Rechner läuft, ein Excel‑Makro oder eine COM‑Komponente auf einem Windows‑Server — bedeuten alle, dass Sie diejenige sind, die die Tabellenkalkulationslogik hostet und skaliert. Aspose.Cells Cloud verwandelt das in reines REST: senden Sie eine Datei (oder nur einen Dateinamen), erhalten Sie Übereinstimmungen — oder eine korrigierte Datei — zurück.

Dieser Beitrag führt durch die von dem Kern-SearchController im Aspose.Cells Cloud‑Microservice bereitgestellten APIs (Quelle: src/Aspose.Cells.Cloud.MicroService/Controllers/SearchController.cs), mit ausführbaren Beispielen in cURL und C# (.NET) sowie Hinweisen für Python‑ und Java‑Benutzer.


1. Was kann der SearchController tun?

SearchController deckt drei Fähigkeitsfamilien ab, die jeweils in mehreren Bereichen verfügbar sind:

Familie Was es tut Verändert das Arbeitsbuch?
Suche Gibt die Text‑Elemente zurück, die einer Abfrage entsprechen — zusammen mit ihrem Blatt‑ und Zellen-/Form-/Hyperlink‑Position Nein
Ersetzen Ersetzt den gefundenen Text und streamt anschließend entweder die korrigierte Datei zurück oder speichert sie im Cloud‑Speicher Ja
Defekte Links Validiert jeden http(s)‑Hyperlink im Arbeitsbuch und gibt diejenigen zurück, die nicht aufgelöst werden können Nein

Und jede Familie wird in vier Bereichen bereitgestellt, was dazu führt, dass die Endpunktliste lang wird:

Umfang Suchen Ersetzen Defekte Links
Lokale Datei → Online-Verarbeitung (Upload im Request-Body) PUT /v4.0/cells/search/content PUT /v4.0/cells/replace/content PUT /v4.0/cells/search/broken-links
Gesamte Arbeitsmappe im Cloud-Speicher PUT /v4.0/cells/{name}/search/content PUT /v4.0/cells/{name}/replace/content PUT /v4.0/cells/{name}/search/broken-links
Einzelnes Arbeitsblatt im Cloud-Speicher PUT /v4.0/cells/{name}/worksheets/{worksheet}/search/content PUT /v4.0/cells/{name}/worksheets/{worksheet}/replace/content PUT /v4.0/cells/{name}/worksheets/{worksheet}/search/broken-links
Einzelner Bereich im Cloud-Speicher PUT /v4.0/cells/{name}/worksheets/{worksheet}/ranges/{cellArea}/search/content PUT /v4.0/cells/{name}/worksheets/{worksheet}/ranges/{cellArea}/replace/content PUT /v4.0/cells/{name}/worksheets/{worksheet}/ranges/{cellArea}/search/broken-links

Plus zwei Bonus‑Endpunkte, die jedes Textelement in einer Arbeitsmappe ausgeben — siehe §4:

Ziel Endpunkt
Alle Text‑Elemente in einer Cloud‑Datei PUT /v4.0/cells/{name}/search/content/all-textitems
Alle Text‑Elemente in einem lokalen Upload PUT /v4.0/cells/search/content/all-textitems

Implementierungshinweis: Routen sind mit v{version:apiVersion}/cells vorangestellt und dieser Controller ist [ApiVersion("4.0")], sodass Live-Aufrufe wie https://api.aspose.cloud/v4.0/cells/... aussehen. Alles in diesem Controller ist ein PUT — selbst die schreibgeschützten Suchen — weil eine Suche als eine Operation, die gegen eine Ressource eingereicht wird, modelliert wird, nicht als cachefähiges GET.

Die beiden Betriebsmodi und warum sie wichtig sind

Der Controller dekoriert jede Aktion, und der Dekorierer sagt Ihnen genau, woher die Datei stammt:

  • [OnlineOperation] — stateless. Sie laden die Arbeitsmappe im Anforderungstext (multipart) hoch, der Server verarbeitet sie im Speicher und es wird nichts im Cloud‑Speicher persistiert. Perfekt für „sagen Sie mir einfach, was in dieser Datei ist“ und für einmalige Vorlagen.
  • [CloudFileOperation] — storage-backed. Der Server ruft {name} aus dem Cloud‑Speicher ab (optional unter folder=), führt die Arbeit aus und — bei den Ersetzungsoperationen — schreibt das Ergebnis direkt zurück. Es wird nichts auf Ihre Maschine übertragen.

Diese eine Unterscheidung, zusammen mit den {worksheet} / {cellArea}‑Routenabschnitten, bildet das gesamte Gedankenkonstrukt. Der Rest dieses Beitrags besteht nur aus Details.

2. Die Antwortmodelle, die Sie tatsächlich analysieren

Beide Suchfamilien geben eine kleine, flache, leicht zu bindende Form zurück. Search gibt SearchResponse zurück:

{
  "Code": 200,
  "Status": "OK",
  "TextItems": [
    {
      "Filename": "Book1.xlsx",
      "Worksheet": "Q3 Forecast",
      "Position": "Cell:B7",
      "Content": "Old Vendor Ltd"
    },
    {
      "Filename": "Book1.xlsx",
      "Worksheet": "Q3 Forecast",
      "Position": "Shape:TextBox 3",
      "Content": "Prepared by Old Vendor Ltd"
    }
  ]
}

Die Suche nach defekten Links liefert BrokenLinksResponse zurück:

{
  "Code": 200,
  "Status": "OK",
  "BrokenLinks": [
    {
      "Filename": "Book1.xlsx",
      "Worksheet": "Links",
      "Position": "Hyperlink:Sheet1!B4",
      "LinkAddress": "https://retired-domain.example.com/report"
    }
  ]
}

Zwei Dinge sind sofort zu beachten:

  1. Position ist ein gekennzeichneter Ort, nicht nur eine Zelladresse. Sie ist mit Cell:, Hyperlink: oder Shape: vorangestellt, wodurch eine flache Liste Ihnen mitteilen kann, welche Art von Element gefunden wurde. Dieses Tag ist der Unterschied zwischen „fix cell B7“ und „fix the text box sitting over B7“.

  2. Beide Modelle sind selbsterklärend für Berichte — Filename und Worksheet werden bei jedem Element zurückgegeben, sodass ein Scan über viele Arbeitsmappen zu einer einzigen Prüftabelle zusammengeführt werden kann, ohne Nachbearbeitung.

3. Zwei Dinge, die Sie benötigen, bevor Sie beginnen

  1. Registrieren Sie ein kostenloses Konto im Aspose Cloud Dashboard und erstellen Sie eine Anwendung, um eine Client ID und ein Client Secret zu erhalten (die SDKs tauschen diese automatisch gegen ein JWT aus – kein Bedarf, Auth‑Header selbst zu erstellen).
  2. Installieren Sie das SDK für die von Ihnen bevorzugte Sprache:
<!-- .NET -->
<PackageReference Include="Aspose.Cells-Cloud" Version="25.x" />
# Python
pip install asposecellscloud
<!-- Java (Maven) — note: NOT on Maven Central, so the Aspose repo below is required -->
<repositories>
    <repository>
        <id>AsposeJavaAPI</id>
        <name>Aspose Java API</name>
        <url>https://repository.aspose.cloud/repo/</url>
    </repository>
</repositories>

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-cells-cloud</artifactId>
    <version>26.8</version>
</dependency>

Kein SDK erforderlich? Alles ist reines REST, sodass cURL genauso gut funktioniert (siehe unten). Die Such/Ersetzen/Broken‑Link‑Familie ist ebenfalls über typisierte SDK‑Anforderungsmodelle erreichbar — SearchSpreadsheetContentRequest, ReplaceContentInRemoteRangeRequest und Freunde — was die C#‑Snippets unten verwenden.

4. Szenario A: Lokale Datei online suchen (nichts gespeichert)

Dies ist PUT /v4.0/cells/search/content — laden Sie die Arbeitsmappe hoch, erhalten Sie die Treffer zurück. Kein Cloud‑Speicher, keine Aufräumarbeiten, keine Kopie bleibt zurück.

① cURL

# 1) Zuerst ein Token erhalten
curl -X POST "https://api.aspose.cloud/connect/token" \
  -d "grant_type=client_credentials" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET"

# 2) "Old Vendor Ltd" überall in einer lokalen Arbeitsmappe finden
curl -X PUT "https://api.aspose.cloud/v4.0/cells/search/content" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "searchText=Old Vendor Ltd" \
  --data-urlencode "ignoringCase=true" \
  -F "file=@Book1.xlsx"

Beschränken Sie es auf ein Blatt oder auf einen Bereich eines Blattes, mit zwei weiteren Abfrageparametern:

# Only "Q3 Forecast", only the range A1:F40
curl -X PUT "https://api.aspose.cloud/v4.0/cells/search/content" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "searchText=Old Vendor Ltd" \
  --data-urlencode "worksheet=Q3 Forecast" \
  --data-urlencode "cellArea=A1:F40" \
  -F "file=@Book1.xlsx"

② C# / .NET

using Aspose.Cells.Cloud.SDK.Api;
using Aspose.Cells.Cloud.SDK.Request;

var cellsApi = new CellsApi("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET");

// Local file, whole workbook
var request = new SearchSpreadsheetContentRequest(
    spreadsheet:  "C:/audit/Book1.xlsx",   // local file path
    searchText:   "Old Vendor Ltd",
    ignoringCase: true);

SearchResponse response = cellsApi.SearchSpreadsheetContent(request);

foreach (var item in response.TextItems)
{
    Console.WriteLine($"{item.Worksheet} | {item.Position} | {item.Content}");
}
// Same call, scoped to one sheet and one range
var scoped = new SearchSpreadsheetContentRequest(
    spreadsheet:  "C:/audit/Book1.xlsx",
    searchText:   "Old Vendor Ltd",
    ignoringCase: true,
    sheetname:    "Q3 Forecast",
    cellarea:     "A1:F40");

Die Anforderungsmodelle stellen auch password (öffnen einer geschützten Arbeitsmappe) und regoin (Region-/Locale‑Einstellung) bereit — dieselben optionalen Parameter, die Sie bei den Cloud‑Storage‑Varianten als storageName sehen. Beachten Sie, dass das .NET SDK die Schreibweise regoin beibehält; das Python SDK nennt dieselben beiden Einstellungen password und region.

③ Python / Java

Das Python SDK umfasst dieselbe Endpunktfamilie, wobei die Felder des Anforderungsmodells eins zu eins den C#‑Feldern entsprechen, jedoch im snake_case:

from asposecellscloud.apis.cells_api import CellsApi
from asposecellscloud.requests import (
    SearchSpreadsheetContentRequest,
    SearchContentInRemoteRangeRequest,
)

instance = CellsApi("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET")

# Local upload — returned items carry Worksheet / Position / Content
local = instance.search_spreadsheet_content(
    SearchSpreadsheetContentRequest(
        "Book1.xlsx", "Old Vendor Ltd",
        ignoring_case=True, worksheet="Q3 Forecast", cell_area="A1:F40"))

# Range-scoped search of a file already in cloud storage
remote = instance.search_content_in_remote_range(
    SearchContentInRemoteRangeRequest(
        "Book1.xlsx", "Q3 Forecast", "A1:F40", "Old Vendor Ltd",
        ignoring_case=True, folder="Reports"))

for item in remote.text_items:
    print(item.worksheet, item.position, item.content)

Das Java SDK folgt derselben Struktur mit Request‑Objekten, die über Setter erstellt werden:

import com.aspose.cloud.cells.api.CellsApi;
import com.aspose.cloud.cells.model.SearchResponse;
import com.aspose.cloud.cells.request.SearchContentInRemoteRangeRequest;

public class SearchDemo {
    public static void main(String[] args) throws Exception {
        CellsApi api = new CellsApi("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET");

SearchContentInRemoteRangeRequest req = new SearchContentInRemoteRangeRequest();
        req.setName("Book1.xlsx");
        req.setWorksheet("Q3 Forecast");
        req.setCellArea("A1:F40");
        req.setSearchText("Old Vendor Ltd");
        req.setIgnoringCase(true);
        req.setFolder("Reports");

SearchResponse response = api.searchContentInRemoteRange(req);
        response.getTextItems().forEach(i ->
            System.out.println(i.getWorksheet() + " | " + i.getPosition() + " | " + i.getContent()));
    }
}

Wenn Sie Roh‑REST verwenden, ist das oben gezeigte cURL der vollständige Vertrag — das Multipart‑Feld muss lediglich den Dateinamen enthalten, da der Dienst den Namen der Arbeitsmappe (und damit ihr Format) daraus ableitet.


5. Szenario B: Suche einer Datei, die bereits im Cloud‑Speicher vorhanden ist

Wenn die Arbeitsmappe bereits im Aspose Cloud Storage ist, überspringen Sie den Download vollständig — der Dienst liest sie dort, wo sie liegt:

# Whole workbook
curl -X PUT "https://api.aspose.cloud/v4.0/cells/Book1.xlsx/search/content" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "searchText=Old Vendor Ltd" \
  --data-urlencode "ignoringCase=true" \
  --data-urlencode "folder=Reports"

# Just one worksheet
curl -X PUT "https://api.aspose.cloud/v4.0/cells/Book1.xlsx/worksheets/Q3%20Forecast/search/content" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "searchText=Old Vendor Ltd"

# Just one range of one worksheet
curl -X PUT "https://api.aspose.cloud/v4.0/cells/Book1.xlsx/worksheets/Q3%20Forecast/ranges/A1:F40/search/content" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "searchText=Old Vendor Ltd"
// Whole workbook in storage
var response = cellsApi.SearchContentInRemoteSpreadsheet(
    new SearchContentInRemoteSpreadsheetRequest(
        name:         "Book1.xlsx",
        searchText:   "Old Vendor Ltd",
        ignoringCase: true,
        folder:       "Reports"));

// One worksheet
var sheetHits = cellsApi.SearchContentInRemoteWorksheet(
    new SearchContentInRemoteWorksheetRequest(
        name:       "Book1.xlsx",
        sheetname:  "Q3 Forecast",
        searchText: "Old Vendor Ltd",
        folder:     "Reports"));

// One range
var rangeHits = cellsApi.SearchContentInRemoteRange(
    new SearchContentInRemoteRangeRequest(
        name:        "Book1.xlsx",
        sheetname:   "Q3 Forecast",
        cellArea:    "A1:F40",
        searchText:  "Old Vendor Ltd",
        ignoringCase: true,
        folder:      "Reports"));

Warum drei Endpunkte statt einem? Weil die Route den Geltungsbereich trägt. Der Endpunkt für das gesamte Arbeitsbuch nimmt einen Namen und eine Abfrage entgegen; der Arbeitsblatt‑Endpunkt nimmt ein Arbeitsblattsegment; der Bereichs‑Endpunkt nimmt ein Arbeitsblatt und ein Bereichssegment. Es ist eine saubere, cache‑fähige REST‑Form — und das bedeutet, dass die Parameter zum „Eingrenzen meiner Suche“ (worksheet, cellArea) nur auf dem lokalen Datei‑Endpunkt existieren, was zu beachten ist, wenn Sie einen Aufruf von einem Geltungsbereich in einen anderen portieren.

6. Szenario C: Alle Text‑Elemente in einer Arbeitsmappe abrufen

Manchmal haben Sie keinen Suchbegriff — Sie möchten den Bestand. Die all-textitems-Endpunkte geben jedes Textelement in der Arbeitsmappe zurück, so können Sie zwei Revisionen vergleichen, ein Übersetzungs‑Glossar erstellen oder einen Indexer füttern:

# Cloud file — every text item
curl -X PUT "https://api.aspose.cloud/v4.0/cells/Book1.xlsx/search/content/all-textitems" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "folder=Reports"

# Local upload — every text item
curl -X PUT "https://api.aspose.cloud/v4.0/cells/search/content/all-textitems" \
  -H "Authorization: Bearer $TOKEN" \
  -F "file=@Book1.xlsx"

Die Antwort ist derselbe SearchResponse‑Umschlag, wobei Content für jede Zellzeichenfolge, Hyperlink‑Beschriftung und Formtext im Dokument gefüllt ist. Dies ist das primitive „grep the whole workbook“.


7. Szenario D: Ersetzen — und die beiden sehr unterschiedlichen Ergebnisse

Replace ist der Punkt, an dem die API in zwei Teile aufgeteilt wird, und die Aufteilung ist bewusst:

Lokaler Upload → die korrigierte Datei herunterladen Cloud-Datei → zurück im Speicher gespeichert
Endpunkt PUT /v4.0/cells/replace/content PUT /v4.0/cells/{name}/replace/content
Rückgabe Ein Dateistream (im selben Format, das Sie hochgeladen haben) CellsCloudResponse { "Code": 200, "Status": "OK" }
Betroffener Speicher Keine Die Originaldatei wird überschrieben

① Ersetzen in einer lokalen Arbeitsmappe, das Ergebnis zurückstreamen

curl -X PUT "https://api.aspose.cloud/v4.0/cells/replace/content" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "searchText={{COMPANY}}" \
  --data-urlencode "replaceText=Northwind Traders" \
  -F "file=@template.xlsx" \
  -o template-rendered.xlsx
using Aspose.Cells.Cloud.SDK.Request;

var request = new ReplaceSpreadsheetContentRequest(
    spreadsheet: "C:/templates/template.xlsx",
    searchText:  "{{COMPANY}}",
    replaceText: "Northwind Traders");

// Option A: get the corrected workbook as a Stream
using Stream corrected = cellsApi.ReplaceSpreadsheetContent(request);
using var outFile = File.Create("C:/templates/template-rendered.xlsx");
corrected.CopyTo(outFile);

// Option B: let the SDK write it for you (.NET overload with an output path)
// cellsApi.ReplaceSpreadsheetContent(request, "C:/templates/template-rendered.xlsx");

Hier stehen ebenfalls zwei Gültigkeitsbereichsparameter zur Verfügung — sheetname und cellarea — sodass Sie Platzhalter in einem Blatt rendern können, ohne den Rest der Vorlage zu berühren.

② Ersetzen in einer Cloud-Arbeitsmappe, an Ort und Stelle speichern

# Whole workbook, saved back to storage
curl -X PUT "https://api.aspose.cloud/v4.0/cells/Book1.xlsx/replace/content" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "searchText=Old Vendor Ltd" \
  --data-urlencode "replaceText=Northwind Traders" \
  --data-urlencode "folder=Reports"

# One worksheet
curl -X PUT "https://api.aspose.cloud/v4.0/cells/Book1.xlsx/worksheets/Q3%20Forecast/replace/content" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "searchText=Old Vendor Ltd" \
  --data-urlencode "replaceText=Northwind Traders" \
  --data-urlencode "folder=Reports"

# One range
curl -X PUT "https://api.aspose.cloud/v4.0/cells/Book1.xlsx/worksheets/Q3%20Forecast/ranges/A1:F40/replace/content" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "searchText=Old Vendor Ltd" \
  --data-urlencode "replaceText=Northwind Traders" \
  --data-urlencode "folder=Reports"
// Whole workbook — result saved back into cloud storage
cellsApi.ReplaceContentInRemoteSpreadsheet(
    new ReplaceContentInRemoteSpreadsheetRequest(
        name:        "Book1.xlsx",
        searchText:  "Old Vendor Ltd",
        replaceText: "Northwind Traders",
        folder:      "Reports"));

// Range-scoped
cellsApi.ReplaceContentInRemoteRange(
    new ReplaceContentInRemoteRangeRequest(
        name:        "Book1.xlsx",
        searchText:  "Old Vendor Ltd",
        replaceText: "Northwind Traders",
        worksheet:   "Q3 Forecast",
        cellarea:    "A1:F40",
        folder:      "Reports"));

In-Place-Ersetzung ist per Design destruktiv. Die Cloud-Varianten überschreiben {name} — es wird keine Sicherungskopie erstellt. Für auditintensive Workflows behalten Sie eine versionierte Kopie (z. B. zuerst Book1-2026-09-11.xlsx hochladen, dann ersetzen) oder verwenden Sie die lokale Upload-Variante und speichern den zurückgegebenen Stream selbst.

Link‑Überprüfung ist hier das verborgene Feature – es ist die Art von Sache, die mühsam selbst zu schreiben ist und peinlich, sie zu überspringen. Alle vier Bereiche sind verfügbar; die lokale Datei‑Variante ist die schnellste Plausibilitätsprüfung:

# Local workbook, whole file
curl -X PUT "https://api.aspose.cloud/v4.0/cells/search/broken-links" \
  -H "Authorization: Bearer $TOKEN" \
  -F "file=@Book1.xlsx"

# Cloud workbook, whole file
curl -X PUT "https://api.aspose.cloud/v4.0/cells/Book1.xlsx/search/broken-links" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "folder=Reports"

# Cloud workbook, one worksheet
curl -X PUT "https://api.aspose.cloud/v4.0/cells/Book1.xlsx/worksheets/Links/search/broken-links" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "folder=Reports"
var broken = cellsApi.SearchSpreadsheetBrokenLinks(
    new SearchSpreadsheetBrokenLinksRequest(
        spreadsheet: "C:/audit/Book1.xlsx"));

foreach (var link in broken.BrokenLinks)
{
    Console.WriteLine($"{link.Worksheet} {link.Position} -> {link.LinkAddress}");
}

Das Ergebnis ist eine Liste, die Sie direkt bearbeiten können: Jeder Eintrag gibt das Blatt, die Position und die fehlerhafte LinkAddress an.


9. Was wird tatsächlich gescannt? (die Implementierungsdetails, die Ihre Erwartungen ändern)

Dies ist der Teil, der eine funktionierende Integration von einer überraschenden unterscheidet. Beim Lesen von WorkbookExtension.cs durchläuft eine Suche drei verschiedene Elementtypen in jedem Arbeitsblatt:

Elementtyp Quelle Was übereinstimmt Position-Tag
Zellzeichenfolgen worksheet.Cells Der Zeichenfolgenwert der Zelle Cell:A1
Hyperlinks worksheet.Hyperlinks Sowohl die Adresse als auch den Anzeigetext Hyperlink:Sheet1!B4
Formen worksheet.Shapes shape.Text — Textfelder, Callouts, Beschriftungen Shape:TextBox 3

Und hier sind die Verhaltensweisen, die es wert sind, vor dem Entwerfen um sie herum zu kennen:

Nur Stringzellen werden durchsucht. Der Scan filtert nach CellValueType.IsString. Eine Zelle, die eine Zahl, ein Datum oder einen Booleschen Wert enthält, wird übersprungen — sodass eine Suche nach 2025 nicht mit einer datumsformatierten Zelle übereinstimmt, deren serielle Zahl zufällig 2025 ist. Zellen, deren Formeln zu Text sind gematcht, weil ihr Werttyp String ist.

Groß-/Kleinschreibung ist die einzige Übereinstimmungsoption. ignoringCase wechselt zwischen InvariantCultureIgnoreCase und InvariantCulture Vergleich — nichts weiter. Es gibt keinen Ganzwort-, Regex- oder “match entire cell value”-Modus, trotz dessen, was die generierten API-Dokumente suggerieren könnten. Wenn Sie diese Semantik benötigen, holen Sie sich das Inventar all-textitems und filtern Sie es auf Ihrer Seite.

Replace ist eine einfache, case-sensitive, wörtliche Ersetzung. Das ignoringCase-Flag von Search hat keine Entsprechung bei Replace — der Ersetzungsweg hat überhaupt keinen Parameter für Groß-/Kleinschreibung. Und die beiden Codepfade unterscheiden sich intern: Ein Ersetzen des gesamten Arbeitsblatts delegiert an die Engine Worksheet.Replace(...), während ein bereichsbezogener Ersatz den Bereich iteriert und jede Zeichenkettenzelle mit cell.StringValue.Replace(...) neu schreibt. Praktische Konsequenz: bereichsbezogener Ersatz berührt nur Zeichenkettenzellen, und er ist wörtlich, nicht musterbasiert.

Hyperlink‑Übereinstimmungen melden die Adresse, nicht die Beschriftung. Wenn eine Suche den Anzeigetext eines Hyperlinks trifft, ist das zurückgegebene Content immer noch hyperlink.Address. Wenn Sie einen „gefunden‑hier“-Bericht rendern, erwarten Sie die URL — die Beschriftung wird nicht zurückgegeben.

Die Überprüfung von defekten Links betrachtet nur http:// und https://. mailto:-Links, lokale Dateipfade und interne #Sheet1!A1-Anker werden vollständig übersprungen – sie werden nie getestet und erscheinen daher nie in den Ergebnissen. Sie scannt außerdem Hyperlinks, die an Formen sowie an Zellen angehängt sind, genau dort, wo defekte Links sich verstecken. Beachten Sie, dass ein defekter Link-Position aus dem rohen hyperlink.Area erstellt wird (nicht aus dem benutzerfreundlicheren Area.ToRangName(), das die Suchendpunkte verwenden), also gehen Sie nicht davon aus, dass die beiden Familien Positionen identisch rendern – parsen Sie das Worksheet + LinkAddress‑Paar, wenn Sie einen stabilen Schlüssel benötigen.

“Broken” bedeutet “unerreichbar”, nicht “falscher Statuscode”. Der Check sendet für jeden Link eine HTTP HEAD‑Anfrage und behandelt jede Antwort — einschließlich 404 oder 500 — als erreichbar; er markiert einen Link nur dann als defekt, wenn die Anfrage wirft (DNS‑Fehler, verweigerte Verbindung, TLS‑Fehler, Timeout). Behandeln Sie also die Ausgabe als “Links, die nicht kontaktiert werden konnten”. Wenn Sie tatsächlich “Links, die keinen 2xx zurückgeben” benötigen, sollten Sie die zurückgegebenen LinkAddress‑Werte selbst erneut prüfen.

cellArea wird akzeptiert, aber bei den Broken-Link-Endpunkten nicht angewendet. Die Implementierung von BrokenLinks filtert nur nach Arbeitsblattnamen; das Zellbereich-Argument wird übergeben, aber nie verwendet. In der Praxis bedeutet das, dass .../ranges/A1:F40/search/broken-links derzeit dasselbe Verhalten zeigt wie /worksheet/search/broken-links für dasselbe Arbeitsblatt – Links werden über das gesamte Blatt hinweg validiert. Passen Sie Ihre Berichte entsprechend an (oder filtern Sie die zurückgegebene Liste nach Position), anstatt anzunehmen, dass der Bereich die Prüfung einschränkt.

Keiner davon ist ein Blocker — sie sind der Unterschied zwischen einer Funktion, die „im Demo funktioniert“ und einer, die sich in der Produktion vorhersehbar verhält.


10. Fehlerbehandlung & betriebliche Hinweise

Der Vertrag, den der Controller dokumentiert

Status Bedeutung Typische Ursache
400 Fehlerhafte Anfrage Ungültige URL/Parameter — z. B. ein fehlerhaftes cellArea oder ein fehlendes searchText
401 Nicht autorisiert Authentifizierung fehlgeschlagen oder es wurden keine gültigen Anmeldeinformationen bereitgestellt
404 Nicht gefunden Quelldatei ist im Cloud-Speicher nicht zugänglich
500 Serverfehler Der Dienst stieß auf eine Anomalie beim Abrufen der Tabellendaten

Intern greift jede Aktion auf einen Helfer (WorkbookElementOperation, UpdateWorkbookElementOperation, UpdateWorkbookElementOperationAndSave) zurück, der die Arbeit einhüllt, Fehler abfängt und sie als CellsApiException mit dem Operationsnamen vorangestellt erneut wirft — zum Beispiel SearchContentInRemoteRange Error Message: .... Dieser Operationsname ist die Zeichenkette, die Sie in Ihren Protokollen sehen werden:

Operation name Endpoint family
SearchSpreadsheetContent, SearchContentInRemoteSpreadsheet Lokale / Remote‑Suche
SearchContentInRemoteWorksheet, SearchContentInRemoteRange Eingeschränkte Remote‑Suche
ReplaceSpreadsheetContent Lokaler Ersatz (Stream‑Ergebnis)
ReplaceContentInRemoteSpreadsheet, ReplaceContentInRemoteWorksheet, ReplaceContentInRemoteRange Remote‑Ersatz (speichert Ergebnis)
SearchSpreadsheetBrokenLinks, SearchBrokenLinksInRemoteSpreadsheet, SearchBrokenLinksInRemoteWorksheet, SearchBrokenLinksInRemoteRange Link‑Validierung

Optionale Parameter, die von den SDKs bereitgestellt werden

Über die dokumentierten Parameter hinaus enthalten die Cloud‑Storage‑Anforderungsmodelle alle dieselben drei optionalen Einstellungen:

  • password — ein passwortgeschütztes Arbeitsbuch öffnen (Suche erfordert keinen Schreibzugriff, daher funktionieren auch schreibgeschützte Dateien);
  • storageName — ein benutzerdefiniertes/angehängtes Cloud‑Speicherziel anstelle des Standard‑Speichers ansteuern (Python: storage_name);
  • regoin — die Region-/Ländereinstellung, die beim Interpretieren des Arbeitsbuchs verwendet wird (Python schreibt dies region).

Authentifizierung

Alle SDKs authentifizieren sich automatisch mit OAuth 2.0 client_credentials und einem JWT; bei Verwendung von rohem cURL rufen Sie zuerst einmal /connect/token auf (siehe §4, ①).

11. Warum Aspose.Cells Cloud für Suche & Ersetzen?

  • ✅ Keine lokalen Abhängigkeiten — keine Office/Excel, kein COM, kein Skript‑Host. Aufrufbar von jeder Sprache, jeder Plattform (Linux, Container, Serverless);
  • ✅ Tiefe über die Textsuche hinaus — Zellen, Formen und Hyperlinks sind allesamt erstklassige Trefferziele, genau dort, wo echte Tabellenkalkulationen ihren Inhalt speichern;
  • ✅ Bereichsbezogene Operationen — Arbeitsmappe / Arbeitsblatt / Bereich, sodass Sie einen Bereich eines Blatts korrigieren können, ohne eine 50 MB‑Datei neu zu schreiben;
  • ✅ Cloud‑native oder zustandslos — Dateien, die bereits im Speicher liegen, verlassen diesen nie; lokale Upload‑Operationen hinterlassen keinerlei Persistenz;
  • ✅ Hochpräzises Umschreiben — Ersetzungen werden über die Aspose.Cells‑Engine angewendet und neu serialisiert, sodass Formeln, Stile, Diagramme und Formatierungen die Rundreise überstehen;
  • ✅ Ein einheitliches Modell über SDKs hinweg — die cURL-, .NET-, Python- und Java‑Schnittstellen bilden 1:1 ab, sodass das Muster, das Sie aus einer Sprache übernehmen, in den anderen funktioniert.

Jetzt loslegen: registrieren Sie sich im Aspose Cloud Dashboard, erstellen Sie eine Anwendung, fügen Sie Ihre Anmeldeinformationen in ein beliebiges Snippet oben ein und richten Sie es auf eines Ihrer eigenen Arbeitsmappen aus — Sie haben in wenigen Minuten eine funktionierende Inhaltsprüfung.

Nützlich gefunden? Markieren Sie es mit einem Stern, setzen Sie ein Lesezeichen oder teilen Sie es — und teilen Sie uns in den Kommentaren mit, wofür Sie die Arbeitsmappen‑Suche und‑Ersetzung verwenden.