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}/cellsile öneklenir ve bu denetleyici[ApiVersion("4.0")]‘dir, bu yüzden canlı çağrılarhttps://api.aspose.cloud/v4.0/cells/...şeklinde görünür. Bu denetleyicideki her şey birPUT— hatta okuma‑yalnızca aramalar — çünkü bir arama bir kaynağa karşı gönderilen bir işlem olarak modellenir, önbelleğe alınabilir birGETdeğ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ı olarakfolder=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:
Positionbir etiketli konumdur, sadece bir hücre adresi değildir. Bu,Cell:,Hyperlink:veyaShape: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.- Her iki model de raporlama için kendini tanımlayan —
FilenameveWorksheether öğ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
- Ücretsiz bir hesabı Aspose Cloud Dashboard üzerinden kaydedin ve bir Uygulama oluşturarak
Client IDveClient Secretalın (SDK’lar bunları otomatik olarak bir JWT ile değiştirir — auth başlıklarını kendiniz oluşturmanıza gerek yok). - 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,ReplaceContentInRemoteRangeRequestve 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) veregoin(bölge/yerel ayar) öğelerini de sunar — bulut depolama varyantlarındastorageNameolarak gördüğünüz aynı isteğe bağlı parametreler. .NET SDK’sınınregoinyazımını koruduğunu, Python SDK’sının ise aynı iki ayarıpasswordveregionolarak 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. önceBook1-2026-09-11.xlsxdosyası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 bunuregionolarak 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.