Bul, Düzelt, Doğrula: Aspose.Cells Cloud Arama, Değiştirme ve Kırık Bağlantı API’sine Tam Bir Rehber (.NET / Python / Java / cURL)

“400 bütçe çalışma kitabımızdan hangisi hâlâ Old Vendor Ltd diyor?” “Bu şablondaki her {{COMPANY}} yer tutucusunu değiştirin.” “Raporlarımızdan herhangi biri geçen yıl kaldırdığımız domaine hâlâ bağlanıyor mu?” — üç çok farklı soru, ortak bir yanıt: bulutta Excel yüklü olmadan elektronik tabloları okuyan ve yeniden yazan bir REST çağrısı.

Spreadsheet content sorunları neredeyse her veri yoğun kod tabanında ortaya çıkar:

  • İçerik denetimi — bir ürün adının kullanımdan kaldırılmış, eski bir ofis adresi veya eski bir yasal varlık içeren her hücre, şekil veya köprüyi bulma;
  • Şablon işleme — bir müşteriye çalışma kitabı göndermeden önce sayfalar arasında {{PLACEHOLDER}} belirteçlerini doldurma;
  • Bağlantı çürümesi — bir uyumluluk veya arşivleme işi onaylamadan önce bir çalışma kitabına gömülü URL’lerin hâlâ çözülüp çözülmediğini kontrol etme;
  • Toplu düzeltme — onlarca sayfada bir yazım hatasını veya yanlış yazılmış sütun değerini düzeltme, ya da sadece bir sayfanın bir bölgesiyle sınırlı.

Tradisyonel seçenekler — kendi bilgisayarınızda çalışan bir betik kütüphanesi, bir Excel makrosu veya bir Windows sunucusundaki bir COM bileşeni — hepsi elektronik tablo mantığını barındırıp ölçeklendiren siz olmanız anlamına gelir. Aspose.Cells Cloud bunu sade bir REST’e dönüştürür: bir dosya (ya da sadece bir dosya adı) gönderin, eşleşmeleri — ya da düzeltilmiş bir dosyayı — geri alın.

Bu gönderi, Aspose.Cells Cloud mikro hizmetindeki temel SearchController tarafından sunulan API’leri (kaynak: src/Aspose.Cells.Cloud.MicroService/Controllers/SearchController.cs) cURL ve C# (.NET)‘de çalıştırılabilir örneklerle ve Python ve Java kullanıcıları için ek notlarla inceliyor.


1. SearchController ne yapabilir?

SearchController üç yetenek ailesi kapsar, her biri birkaç kapsam içinde mevcuttur:`

Family Ne yapar Çalışma kitabını değiştirir mi?
Search Bir sorguya uyan metin öğelerini, sayfa ve hücre/şekil/hiperlink konumlarıyla birlikte döndürür Hayır
Replace Eşleşen metni değiştirir, ardından ya düzeltilmiş dosyayı akış olarak geri gönderir ya da bulut depolamaya kaydeder Evet
Broken links Çalışma kitabındaki tüm http(s) hiperlinkleri doğrular ve çözümlenemeyenleri döndürür Hayır

Ve her aile dört kapsamda ortaya çıkar, bu da uç nokta listesinin uzun olduğu yerdir:

Scope Search Replace Broken links
Yerel dosya → çevrimiçi işleme (istek gövdesinde yükleme) PUT /v4.0/cells/search/content PUT /v4.0/cells/replace/content PUT /v4.0/cells/search/broken-links
Bulut depolamada tüm çalışma kitabı PUT /v4.0/cells/{name}/search/content PUT /v4.0/cells/{name}/replace/content PUT /v4.0/cells/{name}/search/broken-links
Bulut depolamada tek çalışma sayfası 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
Bulut depolamada tek aralık 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

Bir çalışma kitabındaki tüm metin öğeleri döken iki bonus uç nokta daha — bkz. §4:

Hedef Uç nokta
Bulut dosyasındaki tüm metin öğeleri PUT /v4.0/cells/{name}/search/content/all-textitems
Yerel yüklemedeki tüm metin öğeleri PUT /v4.0/cells/search/content/all-textitems

Uygulama notu: rotalar v{version:apiVersion}/cells ile öneklenir ve bu denetleyici [ApiVersion("4.0")]‘dir, bu yüzden canlı çağrılar https://api.aspose.cloud/v4.0/cells/... şeklinde görünür. Bu denetleyicideki her şey bir PUT — hatta okuma‑yalnızca aramalar — çünkü bir arama bir kaynağa karşı gönderilen bir işlem olarak modellenir, önbelleğe alınabilir bir GET değil.

İki çalışma modu ve neden önemli oldukları

Denetleyici her eylemi süsler ve süsleyici dosyanın tam olarak nereden geldiğini söyler:

  • [OnlineOperation] — stateless. Çalışma kitabını istek gövdesinde (multipart) yüklersiniz, sunucu bellekte işler ve hiçbir şey bulut depolamaya kaydedilmez. “Bu dosyada ne var sadece söyle” senaryoları ve tek seferlik şablonlama için mükemmeldir.
  • [CloudFileOperation] — storage-backed. Sunucu {name} öğesini bulut depolamadan (isteğe bağlı olarak folder= altında) alır, işi yapar ve — değiştirme işlemleri için — sonucu doğrudan geri yazar. Hiçbir şey makinenize aktarılmaz.

Bu tek fark, {worksheet} / {cellArea} rota segmentleriyle birlikte, tüm zihinsel modeli oluşturur. Bu gönderinin geri kalanı sadece detaylardır.

2. Gerçekten ayrıştıracağınız yanıt modelleri

Her iki arama ailesi de küçük, düz, bağlaması kolay bir şekil döndürür. Arama, SearchResponse döndürür:

{
  "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"
    }
  ]
}

Kırık bağlantı araması BrokenLinksResponse döndürür:

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

İki şey hemen işaret etmeye değerdir:

  1. Position bir etiketli konumdur, sadece bir hücre adresi değildir. Bu, Cell:, Hyperlink: veya Shape: ile ön eklenir, bu da tek bir düz listenin hangi tür öğenin eşleştiğini size söyleyebilmesini sağlar. Bu etiket, “fix cell B7” ile “fix the text box sitting over B7” arasındaki farktır.
  2. Her iki model de raporlama için kendini tanımlayan — Filename ve Worksheet her öğede döndürülür, böylece birçok çalışma kitabı üzerinde bir tarama, son işlem yapmadan tek bir denetim tablosuna birleştirilebilir.

3. Başlamadan önce ihtiyacınız olan iki şey

  1. Ücretsiz bir hesabı Aspose Cloud Dashboard üzerinden kaydedin ve bir Uygulama oluşturarak Client ID ve Client Secret alın (SDK’lar bunları otomatik olarak bir JWT ile değiştirir — auth başlıklarını kendiniz oluşturmanıza gerek yok).
  2. Seçtiğiniz dil için SDK’yı kurun:
<!-- .NET -->
<PackageReference Include="Aspense.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>

SDK gerekli mi? Her şey düz REST, bu yüzden cURL da aynı şekilde çalışır (aşağıya bakın). Arama/değiştirme/kırık-bağlantı ailesi aynı zamanda tiplenmiş SDK istek modelleri aracılığıyla da erişilebilir — SearchSpreadsheetContentRequest, ReplaceContentInRemoteRangeRequest ve arkadaşları — ki bu, aşağıdaki C# kod parçacıklarının kullandığı şeydir.

4. Senaryo A: Yerel bir dosyayı çevrimiçi arama (hiçbir şey kalıcı değil)

Bu PUT /v4.0/cells/search/content — çalışma kitabını yükleyin, eşleşmeleri alın. Bulut depolama yok, temizlik yok, kopya geride bırakılmadı.

① cURL

# 1) First, get a token
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) Find "Old Vendor Ltd" anywhere in a local workbook
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"

Bunu tek bir sayfaya veya tek bir sayfanın bir bölgesine, iki ek sorgu parametresiyle daraltın:

# 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");

İstek modelleri ayrıca password (korumalı bir çalışma kitabını açma) ve regoin (bölge/yerel ayar) öğelerini de sunar — bulut depolama varyantlarında storageName olarak gördüğünüz aynı isteğe bağlı parametreler. .NET SDK’sının regoin yazımını koruduğunu, Python SDK’sının ise aynı iki ayarı password ve region olarak adlandırdığını unutmayın.

③ Python / Java

Python SDK, aynı uç nokta ailesini kapsar ve istek‑modeli alanları C#‘dakilerle bire bir eşleşir ancak snake_case biçimindedir:

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)

Java SDK, ayarlayıcılar aracılığıyla oluşturulan Request nesneleriyle aynı şekli izler:

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()));
    }
}

Raw REST kullanıyorsanız, yukarıdaki cURL tam sözleşmedir — multipart alanı yalnızca dosya adını taşımalıdır, çünkü hizmet çalışma kitabının adını (ve dolayısıyla formatını) bundan türetir.


5. Senaryo B: Bulut depolamada zaten mevcut olan bir dosyayı ara

Çalışma kitabı zaten Aspose Cloud Storage’da bulunduğunda, indirmeyi tamamen atlayın — hizmet, bulunduğu yerden okur:

# 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"));

Neden bir yerine üç uç nokta? Çünkü yol kapsamı taşır. Tam çalışma kitabı uç noktası bir ad ve bir sorgu alır; çalışma sayfası uç noktası bir çalışma sayfası segmenti alır; aralık uç noktası bir çalışma sayfası ve bir aralık segmenti alır. Bu temiz, önbelleğe alınabilir bir REST şeklidir — ve bu, “aramamı daralt” parametrelerinin (worksheet, cellArea) yalnızca yerel dosya uç noktasında mevcut olduğu anlamına gelir; bu, bir çağrıyı bir kapsamdan diğerine taşırken hatırlanması gereken bir şeydir.


6. Senaryo C: Çalışma kitabındaki tüm metin öğelerini al

Bazen bir arama teriminiz yoktur — envanteri istiyorsunuz. all-textitems uç noktaları, çalışma kitabındaki her metin öğesini döndürür, böylece iki revizyonu karşılaştırabilir, bir çeviri sözlüğü oluşturabilir veya bir indeksleyiciye besleyebilirsiniz:

# 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"

Yanıt aynı SearchResponse zarfıdır ve dosyadaki her hücre dizesi, hiperlink başlığı ve şekil metni için Content doldurulmuştur. Bu, “grep the whole workbook” ilkesidir.


7. Senaryo D: Değiştir — ve iki çok farklı sonuç

Replace, API’nin ikiye bölündüğü yerdir ve bu bölünme kasıtlıdır.

Yerel yükleme → düzeltilmiş dosyayı indirin Bulut dosyası → depolamaya geri kaydedildi
Endpoint PUT /v4.0/cells/replace/content PUT /v4.0/cells/{name}/replace/content
Returns Bir dosya akışı (yüklediğiniz aynı formatta) CellsCloudResponse { "Code": 200, "Status": "OK" }
Storage touched Yok Orijinal dosya üzerine yazıldı

① Yerel bir çalışma kitabında değiştir, sonucu akış olarak geri gönder

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");

Burada da iki kapsam parametresi mevcuttur — sheetname ve cellarea — böylece şablonun geri kalanına dokunmadan tek bir sayfada yer tutucuları işleyebilirsiniz.

② Bulut çalışma kitabında değiştir, yerinde kalıcı olarak kaydet

# 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"));

Yerinde değiştirme, tasarım gereği yıkıcıdır. Bulut varyantları {name} öğesini üzerine yazar — yedek kopya oluşturulmaz. Denetim ağırlıklı iş akışları için, revize edilmiş bir kopya tutun (ör. önce Book1-2026-09-11.xlsx dosyasını yükleyin, ardından değiştirin) veya yerel‑yükleme varyantını kullanarak döndürülen akışı kendiniz saklayın.

8. Senaryo E: Başkaları yapmadan kırık bağlantıları bulun

Bağlantı kontrolü burada gizli bir özelliktir — bunu kendiniz yazmak zahmetli ve atlamak utanç vericidir. Dört kapsamın tamamı mevcuttur; yerel‑dosya varyantı en hızlı akıl sağlığı kontrolüdür:

# 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}");
}

Sonuç, doğrudan işlem yapabileceğiniz bir listedir: her giriş, sayfayı, konumu ve sorunlu LinkAddress değerini adlandırır.

9. Gerçekte ne taranıyor? (Beklentilerinizi değiştiren uygulama detayları)

Bu, çalışan bir entegrasyonu şaşırtıcı bir entegrasyondan ayıran bölümdür. WorkbookExtension.cs dosyasını okurken, bir arama her çalışma sayfasında üç farklı öğe türü üzerinde yürür:

Öğe türü Kaynak Eşleşen Position etiketi
Hücre dizgileri worksheet.Cells Hücrenin dize değeri Cell:A1
Köprüler worksheet.Hyperlinks Hem bağlantı adres hem görüntülenen metni Hyperlink:Sheet1!B4
Şekiller worksheet.Shapes shape.Text — metin kutuları, açıklama balonları, etiketler Shape:TextBox 3

Ve tasarlamadan önce bilmeniz gereken davranışlar şunlardır:

Yalnızca dize hücreleri aranır. Tarama CellValueType.IsString üzerine filtre uygular. Bir hücre sayı, tarih veya boolen tutuyorsa atlanır — bu yüzden 2025 için bir arama, seri değeri 2025 olan tarih biçimli bir hücreyle eşleşmez. Formülleri metne değerlendirilen hücreler eşleşir, çünkü değer türleri dizedir.

Büyük/küçük harf duyarlılığı tek eşleşme seçeneğidir. ignoringCase InvariantCultureIgnoreCase ve InvariantCulture karşılaştırması arasında geçiş yapar — başka bir şey yok. Oluşturulan API belgelerinin önerdiği gibi tam kelime, regex veya “tüm hücre değerini eşleştir” modu yoktur. Bu anlamlara ihtiyacınız varsa, all-textitems envanterini alın ve kendi tarafınızda filtreleyin.

Replace basit, büyük/küçük harfe duyarlı, literal bir ikame işlemidir. Search’in ignoringCase bayrağı Replace’te eşdeğer bir şey içermez — replace yolu tamamen büyük/küçük harfe duyarsız bir parametreye sahip değildir. Ve iki kod yolu dahili olarak farklıdır: tüm çalışma sayfası replace’i motorun Worksheet.Replace(...) metoduna delege ederken, aralık tabanlı replace aralığı iterasyon yapar ve her string hücreyi cell.StringValue.Replace(...) ile yeniden yazar. Pratik sonuç: aralık tabanlı replace yalnızca string hücrelere dokunur, ve bu literal olup, desen tabanlı değildir.

Köprü eşleşmeleri adresi rapor eder, başlığı değil. Bir arama bir köprünün görüntüleme metni ile eşleştiğinde, döndürülen Content hâlâ hyperlink.Address olur. Eğer “burada buldunuz” raporu oluşturuyorsanız, URL’yi bekleyin — başlık geri döndürülmez.

Kırık bağlantı kontrolü yalnızca http:// ve https:// adreslerine bakar. mailto: bağlantıları, yerel dosya yolları ve dahili #Sheet1!A1 bağlantı noktaları tamamen atlanır — hiç test edilmezler, bu yüzden sonuçlarda hiç görünmezler. Ayrıca şekillere eklenmiş hiperlinkleri ve hücreleri tarar, ki bu, ölü bağlantıların saklanmayı sevdiği yerdir. Şunu unutmayın: kırık bağlantı Position değeri ham hyperlink.Area üzerinden oluşturulur (arama uç noktalarının kullandığı daha dostane Area.ToRangName() değil), bu yüzden iki aile pozisyonları aynı şekilde oluşturur diye varsaymayın — sabit bir anahtar gerekiyorsa Worksheet + LinkAddress çiftini ayrıştırın.

“Broken” “erişilemez” anlamına gelir, “yanlış durum kodu” değil. Kontrol, her bağlantı için bir HTTP HEAD isteği gönderir ve her yanıtı — 404 veya 500 dahil — erişilebilir olarak değerlendirir; sadece isteğin hata fırlatır (DNS hatası, reddedilen bağlantı, TLS hatası, zaman aşımı) durumunda bağlantıyı kırık olarak işaretler. Bu yüzden çıktıyı “iletişime geçilemeyen bağlantılar” olarak değerlendirin. Eğer gerçekten ihtiyacınız “2xx döndürmeyen bağlantılar” ise, döndürülen LinkAddress değerlerini kendiniz yeniden kontrol etmek isteyeceksiniz.

cellArea kabul edilir ancak kırık‑bağlantı uç noktalarında uygulanmaz. BrokenLinks uygulaması yalnızca çalışma sayfası adına göre filtreler; hücre‑alan argümanı geçirilir ancak hiç kullanılmaz. Pratikte bu, .../ranges/A1:F40/search/broken-links adresinin şu anda aynı çalışma sayfası için /worksheet/search/broken-links ile aynı şekilde davrandığı anlamına gelir — bağlantılar tüm sayfa boyunca doğrulanır. Raporlarınızı buna göre sınırlayın (veya döndürülen listeyi konuma göre filtreleyin), aralığın denetimi daralttığını varsaymak yerine.

Bunların hiçbiri engelleyici değildir — bunlar, “demoda çalışan” bir özellik ile üretimde öngörülebilir şekilde davranan bir özellik arasındaki farktır.

10. Hata işleme ve operasyon notları

Denetleyicinin belgelediği sözleşme

Durum Anlam Tipik neden
400 Geçersiz İstek Geçersiz URL/parametreler — ör. hatalı biçimlendirilmiş cellArea veya eksik searchText
401 Yetkisiz Kimlik doğrulama başarısız oldu veya geçerli kimlik bilgileri sağlanmadı
404 Bulunamadı Kaynak dosya bulut depolamada erişilemez
500 Sunucu Hatası Hizmet, elektronik tablo verileri alınırken bir anormallikle karşılaştı

İçeride, her eylem çalışmasını bir yardımcı (WorkbookElementOperation, UpdateWorkbookElementOperation, UpdateWorkbookElementOperationAndSave) içinde sarar; bu yardımcı hataları yakalar ve bunları CellsApiException işlem adıyla ön eklenmiş olarak yeniden fırlatır — örneğin SearchContentInRemoteRange Error Message: .... Bu işlem adı, günlüklerinizde göreceğiniz dizedir:

Operation name Endpoint family
SearchSpreadsheetContent, SearchContentInRemoteSpreadsheet Yerel / uzak arama
SearchContentInRemoteWorksheet, SearchContentInRemoteRange Kapsamlı uzak arama
ReplaceSpreadsheetContent Yerel değiştirme (akış sonucu)
ReplaceContentInRemoteSpreadsheet, ReplaceContentInRemoteWorksheet, ReplaceContentInRemoteRange Uzak değiştirme (sonucu kaydeder)
SearchSpreadsheetBrokenLinks, SearchBrokenLinksInRemoteSpreadsheet, SearchBrokenLinksInRemoteWorksheet, SearchBrokenLinksInRemoteRange Bağlantı doğrulama

SDK’ların sunduğu isteğe bağlı parametreler

Belgelendirilmiş parametrelerin ötesinde, bulut depolama istek modelleri aynı üç isteğe bağlı ayarı içerir:

  • password — şifre korumalı bir çalışma kitabını açar (arama işlemleri yazma erişimi gerektirmez, bu yüzden yalnızca okuma korumalı dosyalar sorunsuz çalışır);
  • storageName — varsayılan yerine özel/ekli bulut depolamayı hedefler (Python: storage_name);
  • regoin — çalışma kitabını yorumlarken kullanılan bölge/yerel ayar (Python bunu region olarak yazar).

Authentication

Tüm SDK’lar OAuth 2.0 client_credentials ve bir JWT ile otomatik olarak kimlik doğrulaması yapar; ham cURL kullanırken önce bir kez /connect/token çağırın (bkz. §4, ①).

11. Neden Aspose.Cells Cloud arama ve değiştirme için?

  • ✅ Sıfır yerel bağımlılık — Office/Excel yok, COM yok, betik barındırıcısı yok. Herhangi bir dilden, herhangi bir platformdan (Linux, konteynerler, sunucusuz) çağrılabilir;
  • ✅ Metin aramasından daha derin — hücreler, şekiller ve hiperlinkler hepsi birinci sınıf eşleşme hedefleridir; bu, gerçek elektronik tabloların içeriğini sakladığı yerdir;
  • ✅ Kapsamlı işlemler — çalışma kitabı / çalışma sayfası / aralık, böylece 50 MB’lık bir dosyayı yeniden yazmadan bir sayfanın bir bölgesini düzeltebilirsiniz;
  • ✅ Bulut‑yerel veya durumsuz — depoda zaten bulunan dosyalar asla ayrılmaz; yerel‑yükleme işlemleri hiçbir şey kalıcı olarak saklamaz;
  • ✅ Yüksek doğrulukta yeniden yazma — değişiklikler Aspose.Cells motoru aracılığıyla uygulanır ve yeniden serileştirilir, böylece formüller, stiller, grafikler ve biçimlendirme dönüşümde korunur;
  • ✅ SDK’lar arasında tek şekil — cURL, .NET, Python ve Java arabirimleri 1:1 eşleşir, böylece bir dilden kopyaladığınız desen diğerlerinde de çalışır.

Hemen başlayın: kaydolun Aspose Cloud Dashboard adresinde, bir Uygulama oluşturun, kimlik bilgilerinizi yukarıdaki herhangi bir kod parçacığına ekleyin ve kendi çalışma kitabınızdan birine yönlendirin — birkaç dakika içinde çalışan bir içerik denetimi elde edeceksiniz.

Bunu faydalı buldunuz mu? Yıldızlayın, yer işareti koyun veya paylaşın — ve yorumlarda çalışma kitabı arama ve değiştirme özelliğini ne için kullandığınızı bize söyleyin.