Spreadsheet
TsgcHTMLComponent_Spreadsheet: Delphi, C++ Builder ve .NET web uygulamaları için formüllü bir ızgara. Kullanıcılar değerleri ve formülleri Excel'deki gibi yazar, sunucu bunları hesaplar ve her değişiklik saklanmadan önce kodunuza ulaşır.
TsgcHTMLComponent_Spreadsheet: Delphi, C++ Builder ve .NET web uygulamaları için formüllü bir ızgara. Kullanıcılar değerleri ve formülleri Excel'deki gibi yazar, sunucu bunları hesaplar ve her değişiklik saklanmadan önce kodunuza ulaşır.
Bir forma yerleştirin, sayfasını kodla doldurun ve oluşturun. Her düzenleme sunucuya gider; sunucu onu denetler, ona bağlı hücreleri yeniden hesaplar ve değişen hücreleri yanıt olarak döndürür. Tarayıcıda formül motoru yoktur, bu nedenle Delphi ve .NET aynı değerleri hesaplar.
TsgcHTMLComponent_Spreadsheet, sayfa modeli TsgcHTMLSpreadsheetSheet ile Sheet özelliğinde
Araç çubuğu, formül çubuğu ve durum çubuğu olan, harici kitaplık içermeyen, saf JavaScript ve CSS ile yazılmış sanallaştırılmış bir ızgara
Delphi, C++ Builder, .NET
Hücreleri kodla SetCellByName ile ayarlayın. OnCellChange, bir kullanıcının değiştirdiği her hücreyi denetler ve saklar; LiveSync ile ana bilgisayar bir değişiklikten sonra GetLiveSyncFragmentHTML yayınlar, böylece açık her sayfa değişen hücreleri yeniden yükler.
uses
sgcHTML_Formula, sgcHTML_Component_Spreadsheet, sgcHTMX_Engine_Server;
// Formda: bir TsgcHTMLComponent_Spreadsheet (Spreadsheet1), şu ayarla
// LiveSync = True ve sayfanın TsgcHTMX_Engine_Server (HTMXEngine1) bileşeni
procedure TMainModule.DataModuleCreate(Sender: TObject);
begin
Spreadsheet1.Sheet.SetCellByName('A1', 'Item');
Spreadsheet1.Sheet.SetCellByName('B1', 'Amount');
Spreadsheet1.Sheet.SetCellByName('A2', 'Rent');
Spreadsheet1.Sheet.SetCellByName('B2', '1200');
Spreadsheet1.Sheet.SetCellByName('A3', 'Travel');
Spreadsheet1.Sheet.SetCellByName('B3', '340.50');
Spreadsheet1.Sheet.SetCellByName('A4', 'Total');
Spreadsheet1.Sheet.SetCellByName('B4', '=SUM(B2:B3)');
end;
// Bir kullanıcının değiştirdiği her hücre: yazma, yapıştırma, doldurma veya temizleme
procedure TMainModule.Spreadsheet1CellChange(Sender: TObject; aRow, aCol: Integer;
const aOldRaw: string; var aNewRaw: string; var aAccept: Boolean);
begin
if aRow = 0 then
aAccept := False // başlık satırı olduğu gibi kalır
else
StoreCell(sgcHTMLCellName(aRow, aCol), aNewRaw); // kendi deponuz: bir tablo, bir dosya
end;
// Değişiklik uygulandı ve yeniden hesaplandı: açık her sayfaya haber verin
procedure TMainModule.Spreadsheet1Change(Sender: TObject;
aSheet: TsgcHTMLSpreadsheetSheet);
begin
HTMXEngine1.BroadcastFragment(Spreadsheet1.GetLiveSyncFragmentHTML);
end;
// GET /budget.xlsx: sayfa, formülleri ve stilleriyle bir çalışma kitabı olarak
procedure TMainModule.ExportBudget(aStream: TStream);
begin
Spreadsheet1.SaveToXLSX(aStream);
end;
@* Views/Sheets/Budget.cshtml: ekibin ortak bütçesi *@
@model BudgetModel
<sgc-spreadsheet name="budget" rows="40" cols="14"
frozen-rows="1" frozen-cols="1" css-height="560px"
allow-insert-delete="false" live-sync="true"
on-get-sheet="Model.GetSheet"
on-cell-change="Model.CellChange"
on-change="Model.Changed" />
using esegece.sgcWebSockets;
var budget = new TsgcHTMLComponent_Spreadsheet();
budget.LiveSync = true;
budget.Sheet.SetCellByName("A1", "Item");
budget.Sheet.SetCellByName("B1", "Amount");
budget.Sheet.SetCellByName("A2", "Rent");
budget.Sheet.SetCellByName("B2", "1200");
budget.Sheet.SetCellByName("B3", "340.50");
budget.Sheet.SetCellByName("A4", "Total");
budget.Sheet.SetCellByName("B4", "=SUM(B2:B3)");
budget.OnCellChange += CellChange;
budget.OnChange += Changed;
// OnCellChange: tek bir hücreyi denetle ve sakla
public void CellChange(object Sender, int aRow, int aCol, string aOldRaw,
ref string aNewRaw, ref bool aAccept)
{
if (aRow == 0)
aAccept = false;
else
store.Save(aRow, aCol, aNewRaw);
}
// OnChange: uygulandı ve yeniden hesaplandı, açık her sayfa değişen hücreleri yeniden yükler
public void Changed(object Sender, TsgcHTMLSpreadsheetSheet aSheet)
{
_ = hub.BroadcastAsync(((TsgcHTMLComponent_Spreadsheet)Sender).GetLiveSyncFragmentHTML());
}
// OnGetSheet: kullanıcı başına bir sayfa
public void GetSheet(object Sender, ref TsgcHTMLSpreadsheetSheet? aSheet)
{
aSheet = sheets.ForUser(User.Identity.Name);
}
// GET /budget.xlsx
using var ms = new MemoryStream();
budget.SaveToXLSX(ms);
Excel'den bildiğiniz klavye, pano ve formüller, sunucunuzun sakladığı tek bir sayfada.
= ile başlayan bir hücre formüldür: + - * / ^ % & işleçleri, karşılaştırmalar, parantezler, hücre başvuruları ve A1:C5 gibi aralıklar; mutlak kısımlar $A$1, A$1 veya $A1 olarak yazılır. İşlem önceliği ve metinden sayıya dönüştürme Excel'deki gibi çalışır. Hatalar #DIV/0!, #VALUE!, #REF!, #NAME?, #NUM! ve #N/A olarak gösterilir, #CIRC! ise döngüsel başvurudaki bir hücreyi işaretler.
Matematik ve istatistik: SUM, AVERAGE, MIN, MAX, COUNT, COUNTA, COUNTBLANK, PRODUCT, ROUND, ROUNDUP, ROUNDDOWN, INT, MOD, ABS, SQRT, POWER, PI. Mantık ve bilgi: IF, IFERROR, AND, OR, NOT, TRUE, FALSE, ISBLANK, ISNUMBER, ISTEXT, ISERROR. Metin: CONCAT, CONCATENATE, LEN, LEFT, RIGHT, MID, UPPER, LOWER, TRIM, VALUE.
Koşullu: SUMIF, COUNTIF ve AVERAGEIF; ölçütler ">10", "<>x" ve * ile ? joker karakterleri gibi olabilir. Arama: VLOOKUP ve HLOOKUP, tam veya yaklaşık, INDEX ve MATCH. Tarih: DATE, YEAR, MONTH, DAY, TODAY, Excel seri numaraları üzerinde. Finansal: PMT, FV, PV, NPV. Toplam 54 işlev, Excel semantiğiyle; formül çubuğu adlarını tamamlar.
Kalın, italik, hizalama, metin rengi ve dolgu rengi ile hücre başına bir sayı biçimi: Genel, Sayı, Para birimi, Yüzde, Tarih veya Metin; 0 ile 10 arası ondalık, binlik ayracı, para birimi simgesi ve tarih biçimi. Görüntü, tanımlıysa kullanımdaki sgcHTML yerel ayarının ondalık ve binlik ayraçlarını alır.
Oklar, Tab ve Shift+Tab, Enter ve Shift+Enter, Home, End, Ctrl+Home, Ctrl+End, Ctrl+oklar, PageUp ve PageDown. F2 veya yazmak düzenlemeyi başlatır, Esc iptal eder, Delete temizler. Shift+oklar, Shift+tıklama veya fareyle sürükleme bir aralığı seçer, bir başlığa tıklamak satırı veya sütunu seçer, Ctrl+D ve Ctrl+R aşağı ve sağa doldurur, Ctrl+Z ve Ctrl+Y kullanıcının kendi düzenlemelerini geri alır ve yineler.
Formül çubuğu hücrenin ham içeriğini gösterir, ad kutusu ise bir hücreye atlar: B12 yazın ve Enter tuşuna basın. Bir formül düzenlenirken başvuruları renklerle vurgulanır ve kullanıcı hücrelere tıklayabilir veya aralıkları içine sürükleyebilir.
Kopyalama, kesme ve yapıştırma, Excel ve Google E-Tablolar'ın panoya koyduğu biçim olan sekmeyle ayrılmış metni kullanır; böylece bir hücre bloğu ikisi arasında her iki yönde taşınır. Sayfa içinde kopyalanıp başka bir yere yapıştırılan veya doldurulan bir formülün göreli başvuruları kaydırılır, mutlak olanlar korunur.
Araç çubuğundan veya bir hücrenin ya da başlığın bağlam menüsünden üste veya alta satır, sola veya sağa sütun ekleyin, satırları ve sütunları silin. Her formüldeki her başvuru Excel'deki gibi ayarlanır ve silinen bir hücreye başvuru #REF! olur. Sütunlar başlık kenarı sürüklenerek yeniden boyutlandırılır, satırlar ve sütunlar dondurulabilir.
Excel'e aktarma, formülleri ve değerleri, hücre stillerini ve sayı biçimlerini, sütun genişliklerini ve dondurulmuş bölmeleri içeren bir .xlsx indirir. İçe aktarma, kullanıcı geçerli sayfanın değiştirileceğini onayladığında formülleri ve stilleriyle bir .xlsx dosyasını veya bir .csv dosyasını okur.
LiveSync ile aynı sayfayı açık tutan kişiler birbirlerinin değişikliklerini görür: başka bir kullanıcının değiştirdiği hücreler yeniden yüklenir ve yanıp söner. Kabul edilen her değişiklik sayfanın düzeltme numarasını artırır; bir düzeltmeyi kaçıran sayfa tüm sayfayı yeniden yükler.
Durum çubuğu seçimin Toplam, Ortalama ve Say değerlerini gösterir, bir gösterge ise değişikliklerin kaydedilip kaydedilmediğini belirtir. Sayfada yalnızca görünen satırlar ve sütunlar bulunur, bu yüzden 10.000 satır ve 104 sütunluk bir sayfa akıcı kayar. JavaScript olmadan da sayfa, tarayıcı botlarının okuyabileceği düz bir hücre tablosu içerir.
Sayfa, satır ve sütun sayıları ve dizinleriyle bir WAI-ARIA ızgarasıdır; kibar bir canlı bölge hücre başvurusunu ve değerini duyurur. Sayfa temasını izler, dir="rtl" altında kendini yansıtır, azaltılmış hareketi dikkate alır ve telefon genişliğinde çalışır: dokunmatik kaydırma, seçmek için dokunma ve düzenlemek için çift dokunma.
En sık başvurduğunuz üyeler.
Sheet bir TsgcHTMLSpreadsheetSheet nesnesidir. SetCell(aRow, aCol, aRaw) ve SetCellByName('B2', '=A1*2') bir hücreyi ayarlar, Raw, Value, Text ve Style onu okur. = ile başlayan bir raw değer formüldür, baştaki kesme işareti metni zorlar. API'de satırlar ve sütunlar 0'dan başlar, yani A1 satır 0, sütun 0'dır. Lock ve Unlock, kendi iş parçacıklarınızdan yapılan değişiklikleri korur.
OnCellChange(Sender, aRow, aCol, aOldRaw, aNewRaw, aAccept), bir kullanıcının değiştirdiği her hücre için çalışır. Değeri düzeltmek için aNewRaw değerini değiştirin, reddetmek için aAccept değerini False yapın veya saklayın. OnChange(Sender, aSheet), değişiklik uygulanıp yeniden hesaplandıktan sonra gelir: GetLiveSyncFragmentHTML yayınlamak için doğru yer.
OnGetSheet(Sender, aSheet), isteğin arkasındaki kullanıcının sayfasını döndürür. Oluşturma sırasında ve her istekte çağrılır, böylece tek bir bileşen her biri kendi sayfasına sahip tüm kullanıcılara hizmet verir.
Tarayıcı kullanıcının yazdığını gönderir, gerisini sunucu yapar: değişikliği uygular, ona bağlı hücreleri bağımlılık grafiği üzerinden yeniden hesaplar ve yalnızca değişen hücreleri yanıtlar. Recalculate tam bir hesaplama çalıştırır, Evaluate ise bir formülü herhangi bir hücrenin dışında hesaplar. Delphi ve .NET aynı sonuçları, aynı JSON'u ve aynı XLSX baytlarını verir.
Sunucu tarayıcıya asla güvenmez. ReadOnly, AllowFormulas, AllowFormatting, AllowInsertDelete, AllowImport ve AllowExport anahtarlarını, koordinatları MaxRows (10000) ve MaxCols (104), MaxCells (100000), MaxCellLength (8192) ve MaxImportSize (5 MB) değerlerine karşı denetler, ardından her hücre için OnCellChange olayını çağırır. OnImport bir dosyayı reddedebilir.
RowCount (100) ve ColCount (26) sayfanın boyutunu belirler, FrozenRows ve FrozenCols başlıkları sabitler, DefaultColWidth, RowHeight ve CSSHeight boyutları ayarlar, ShowToolbar, ShowFormulaBar ve ShowStatusBar çubukları açar veya kapatır. ExportFileName indirilen çalışma kitabını adlandırır.
SaveToXLSX ve LoadFromXLSX, formüller ve stiller dahil bir çalışma kitabını koddan yazar ve okur. Sayfada SaveToJSON ve LoadFromJSON onu Delphi ve .NET'in bayt bayt aynı yazdığı tek bir JSON biçiminde saklar, SaveToCSV ve LoadFromCSV ham değerlerle RFC 4180 kullanır, LoadFromDataSet ise bir başlık satırını ve kayıtları yükler.
InsertRows, DeleteRows, InsertCols ve DeleteCols(aIndex, aCount) her başvuruyu Excel'deki gibi ayarlar. ShiftFormula(aFormula, aDeltaRow, aDeltaCol) bir formülün göreli başvurularını kaydırır ve mutlak olanları korur; tarayıcı yapıştırma ve doldurmada aynı kuralı uygular.
Sayfa, HTMX motorunun bileşen olayları uç noktasına veya ActionURL adresine gönderir. İkisi de yoksa sayfanın salt okunur bir görüntüleyicisidir.
Bir Razor görünümünde <sgc-spreadsheet> Tag Helper sayfayı oluşturur ve istekleri UseSgcHtml ile eklenen sgcHTML ara yazılımı yanıtlar. Öznitelikleri name, read-only, rows, cols, frozen-rows, frozen-cols, css-height, allow-* anahtarları, live-sync, action-url ve işleyiciler on-get-sheet, on-cell-change ve on-change öğeleridir.
Demos\60.HTML\01.RunTime\35.Spreadsheet, 8137 numaralı bağlantı noktasında üç sayfalı bir sunucu olan sgc Sheets uygulamasıdır: herkesin canlı düzenlediği bir ekip bütçesi (SUM toplamları, toplamın yüzdesi, para birimi biçimi ve her değişiklikte yenilenen bir grafikle); ziyaretçi başına bir sayfası, PMT, aşağı doldurulmuş bir amortisman tablosu ve bir bakiye grafiği olan kredi hesaplayıcısı; ve SUMIF ile VLOOKUP, XLSX dışa ve içe aktarma içeren bölgeye göre satışlar. Tasarım zamanı, Lazarus ve .NET sürümleri bunu yansıtır.
| Online DeneyinElektronik Tablo demosunda görün, eSeGeCe demo sunucusunda canlı çalışıyor. | Aç | |
| Çevrimiçi yardımBu bileşen için tam API referansı ve kullanım kılavuzu. | Aç | |
| Grid BileşeniVeri kümeleri için veri ızgarası: sıralama, filtreleme, gruplama, satır içi düzenleme ve dışa aktarma. | Aç | |
| Tüm sgcHTML Bileşenleri80'den fazla bileşenin tam özellik matrisine göz atın. | Aç | |
| Ücretsiz Deneme Sürümünü İndirin30 günlük deneme, 60.HTML demo projeleriyle birlikte gelir. | Aç | |
| FiyatlandırmaTam kaynak kodlu Single, Team ve Site lisansları. | Aç |