بررسی اجمالی نمای XLSX (lxHandleX)
lxHandleX واحد نمای اختصاصی برای گردشهای کاری کارپوشه Excel 2007+ (.xlsx) و OpenDocument Spreadsheet (.ods) است. این واحد در کنار نمای اصلی lxHandle همزیستی دارد تا کدهای قدیمی بدون هیچ تغییری به کار خود ادامه دهند:
lxHandle— نمای اصلی برای قالب BIFF در Excel 97-2003 (.xls)، و خروجیهای HTML، RTF، CSV و TSV. تمام کدهای موجود کاربر بدون تغییر به استفاده از این واحد ادامه میدهندlxHandleX— نمای اصلی برای قالب OOXML در Excel 2007+ (.xlsx) و گردشهای کاری خواندن/نوشتن ODS. انواع کارپوشه و کاربرگ خود را ارائه میدهد تا رفتار خاص XLSX به مسیر کد BIFF اضافه نشود، و وارد کردن، صادر کردن و تشخیص خودکار ODS را از طریقOpen،SourceFormatوTODSExportOptionsدر دسترس قرار میدهد
سلسلهمراتب کلاسها
نمای XLSX کلاسهای زیر را در دسترس قرار میدهد:
type
TXLSXWorkbook = class // top-level workbook with SaveAs / Open
TXLSXHtmlExportOptions = class // HTML document, style, BOM, and table class options
TODSExportOptions = class // ODS export options for generator, chart, and image output
TXLSXSheets = class // worksheet collection on the workbook
TXLSXFonts = class // workbook-level font palette
TXLSXFont = class // single font descriptor
TXLSXFills = class // workbook-level fill palette
TXLSXFill = class // single fill (pattern + fg/bg color)
TXLSXBorders = class // workbook-level border palette
TXLSXBorder = class // four edges + diagonal border
TXLSXNumberFormats = class // workbook-level custom format codes
TXLSXDefinedNames = class // workbook-level named ranges
TXLSXWorksheet = class // single worksheet with cells and decorations
TXLSXCells = class // cell collection on the worksheet
TXLSXCell = class // single cell (value, formula, *Index style refs)
TXLSXRange = class // rectangular worksheet range wrapper
TXLSXMergedCells = class // merged-range collection
TXLSXHyperlinks = class // hyperlink collection
TXLSXComments = class // cell-comment collection
TXLSXImages = class // image collection (drawings + media)
TXLSXConditionalFormats = class // conditional formatting rules
TXLSXDataValidations = class // data-validation rules
TXLSXTables = class // Excel-style table collection
TXLSXCharts = class // chart collection (anchored or full-page)
TXLSXChart = class // single chart (column / bar / line / pie / scatter / bubble / radar)
TXLSXChartSeries = class // chart series with category, value, and bubble-size ranges
TXLSXTextBox = class // standalone worksheet drawing text box
TXLSXRichText = class // per-run rich-text payload for cells
TXLSXAlignment = class // cell alignment / wrap / indent / rotation
TXLSXExternalLinks = class // external workbook link collection
TXLSXExternalLink = class // single external workbook reference (Target URL + SheetNames)
این کلاسها مستقل از lxHandle.TXLSWorkBook و lxHandle.TXLSWorksheet هستند. برنامههایی که به هر دو قالب نیاز دارند، میتوانند از هر دو نما در کنار یکدیگر استفاده کنند:
uses
lxHandle, // XLS / HTML / RTF / CSV workbook (TXLSWorkBook)
lxHandleX; // XLSX workbook (TXLSXWorkbook)
شروع سریع
نمای XLSX از همان قراردادهای شکل فراخوانی نمای BIFF پیروی میکند — متدهای SaveAs / Open در کارپوشه، Sheets.Add / Sheets[i] در مجموعه کاربرگ و Cells.Item[Row, Col].Value در مجموعه سلول. مثال زیر یک کارپوشه کوچک را مینویسد که تمام ویژگیهای در حال حاضر پشتیبانیشده را تمرین میکند:
uses lxHandleX;
var
wb: TXLSXWorkbook;
ws: TXLSXWorksheet;
bold, yellow, box, currency: Integer;
begin
wb := TXLSXWorkbook.Create;
try
bold := wb.Fonts.Add('Calibri', 12, True, False);
yellow := wb.Fills.AddSolid($FFFFFF00);
box := wb.Borders.AddBox(xlsxBorderThin);
currency := wb.NumberFormats.Add('"$"#,##0.00');
ws := wb.Sheets.Add('Demo');
ws.Cells.Item[1, 1].Value := 'Hello';
ws.Cells.Item[1, 1].FontIndex := bold + 1;
ws.Cells.Item[1, 2].Value := 123.45;
ws.Cells.Item[1, 2].NumberFormatIndex := currency + 1;
ws.Cells.Item[2, 1].Value := Now; // tagged as date
ws.Cells.Item[2, 2].Formula := 'SUM(B1:B1)';
ws.Cells.Item[3, 1].FillIndex := yellow + 1; // highlight cell
ws.Cells.Item[3, 2].BorderIndex := box + 1; // boxed cell
ws.ColWidth[1] := 24;
ws.RowHeight[1] := 28;
ws.MergeCells(4, 1, 4, 3);
ws.Range['A8:C10'].Merge(True); // merge across rows
ws.AddHyperlink(5, 1, 'https://www.loslab.com', 'Visit losLab');
ws.AddComment(5, 2, 'Important note', 'Kevin');
ws.AddImageFromFile(6, 1, 'logo.png');
ws.AddConditionalFormat('B1:B10', xlsxCfOpGreaterThan, '100');
ws.AddListValidation('C1:C5', 'Yes,No,Maybe');
wb.DefinedNames.Add('SalesData', 'Demo!$A$1:$B$10');
wb.SaveAs('demo.xlsx');
finally
wb.Free;
end;
end;
ویژگیهای پشتیبانیشده
- مقادیر سلول: اعداد، مقادیر منطقی (بولی)، رشتهها، تاریخها، فرمولها
- جدول رشتههای مشترک (
xl/sharedStrings.xml) با حذف موارد تکراری در مسیر نوشتن - پالتهای سبک در سطح کارپوشه —
Workbook.Fonts،Fills،BordersوNumberFormats— به همراهFontIndex/FillIndex/BorderIndex/NumberFormatIndexبرای هر سلول. متد SaveAs بلوکهای واقعی<fonts>/<fills>/<borders>/<numFmts>+<cellXfs>را صادر میکند؛ متد Open آنها را بازخوانی و تجزیه میکند تا نام/اندازه/ضخیم (Bold)/مورب (Italic)/رنگ، الگوهای پر کردن، لبههای حاشیه و قالبهای عدد سفارشی همگی در این رفت و برگشت حفظ شوند - عرضهای هر ستون از طریق
Worksheet.ColWidth[Col]و ارتفاعهای هر ردیف از طریقWorksheet.RowHeight[Row](بلوک<cols>در کاربرگ و ویژگیهایhtبرای هر<row>) - ویژگی
cellXfتاریخ داخلی در شاخصXlsxXfIndexDate؛ مقادیرTDateTimeبه طور خودکار برچسبگذاری میشوند - سلولهای ادغامشده (
<mergeCells>)، از جملهTXLSXRange.Merge(True)برای ادغام ردیفها به سبک Excel - محدودههای کاربرگ از طریق
Worksheet.Range،RCRange،UsedRange،EntireRowوEntireColumn. برای مقادیر گروهی، فرمولها،SetArrayFormula، شاخصهای سبک، قالبهای عدد، حاشیهها، پرچمهای محافظت، برازش خودکار، ادغام، جابهجایی (offset)، تغییر اندازه، مرتبسازی چندکلیدیSort، سبکهای سلول داخلیApplyBuiltinStyle، کمککنندههای کپی/انتقال,کمککنندههای درج/حذف کامل ردیف/کامل ستون و خروجی HTML محدوده انتخابشده، به TXLSXRange مراجعه کنید - ابرپیوندها (
<hyperlinks>) پشتیبانیشده توسط فایلهای ارتباطی (rels) برای هر کاربرگ جهت ارتباط با URLهای خارجی - کامنتهای سلول به همراه ترسیم VML (
xl/commentsN.xml+xl/drawings/vmlDrawingN.vml) به طوری که بالنها در Excel رندر شوند - تصاویر تعبیهشده (PNG / JPEG / GIF / BMP) از طریق
Worksheet.Images، نوشتهشده درxl/media/imageN.<ext>به همراه XML ترسیم و فایلهای ارتباطی (rels) برای هر برگ - کادرهای متنی ترسیم مستقل از طریق
Worksheet.AddTextBox، نوشتهشده به عنوان اشکال ترسیم کاربرگ با بدنههای متنی به جای کامنتهای سلول، با جستجوی مستقیم لنگر و کمککنندههای حذف محدوده - محدودههای نامگذاریشده در سطح کارپوشه از طریق
Workbook.DefinedNames(با دامنه کارپوشه یا دامنه برگ از طریقSheetIndex) - محاسبه فرمول از طریق
Workbook.CalculateوWorksheet.Calculate، با به اشتراکگذاری تجزیهکننده و ارزیاب فرمول XLS برای فرمولهای شروعشونده با علامت مساوی، ارجاعهای سلول و محدوده، سلولهای فرمول ارجاع دادهشده,ارجاعهای بینبرگی، محدودههای نامگذاریشده، و توابع متنی، تاریخی، روز کاری، مهندسی/تبدیل مبنا، بیتی، آماری، تجمعی و ریاضی پشتیبانیشده؛ برای حل توابع سفارشی یا پشتیبانینشده ازWorkbook.OnUserFunctionیاWorkbook.OnUserFunctionExاستفاده کنید - قالببندی شرطی برای هر کاربرگ (
Worksheet.ConditionalFormats) و اعتبار سنجی داده (Worksheet.DataValidations) شامل میانبر بازشویAddListValidation(Range, Items) - گروههای طرح کلی ردیف / ستون (
RowOutlineLevel،ColOutlineLevel)، وضعیت پنهان (RowHidden،ColHidden) و وضعیت گروه جمعشده (RowCollapsed،ColCollapsed) - فریمهای ثابتشده (Freeze panes) از طریق
Worksheet.FreezePanes(Row, Col) - تنظیمات صفحه — شش ویژگی حاشیه، اندازه کاغذ، جهت، مقیاس صفحه، برازش با عرض / برازش با ارتفاع، به همراه
HeaderText/FooterText. ثابتهای نامگذاریشدهxlsxPaper*مانندxlsxPaperLetter،xlsxPaperA4،xlsxPaperA3وxlsxPaperLegalمیتوانند بهPaperSizeاختصاص داده شوند - فیلتر خودکار (
Worksheet.SetAutoFilter) - جدولهای به سبک Excel (TXLSXTable) با اطلاعات سبک و tableColumns
APIهای زیرمجموعه نما
کلاسهای مجموعه نما، قالبهای شرطی، اعتبار سنجیهای داده، محدودههای نامگذاریشده، تصاویر و جدولها را مدیریت میکنند. اعضای اصلی هر مجموعه در زیر آمده است:
- TXLSXConditionalFormats: قوانین قالببندی شرطی را در دسترس قرار میدهد. ویژگیها:
Countمتدها:AddAboveAverage،AddColorScale2،AddColorScale3،AddDataBar،AddExisting،AddExpression،AddIconSet،AddSimpleRule،AddTextRule،AddTop10،DeleteAt،DeleteInRange،FindAt،IndexOfCell - TXLSXDataValidations: اعتبار سنجیهای داده را در دسترس قرار میدهد. ویژگیها:
Countمتدها:AddExisting،AddList،DeleteAt،DeleteInRange،FindAt،IndexOfCell - TXLSXDefinedNames: نامهای تعریفشده (محدودههای نامگذاریشده) را در دسترس قرار میدهد. ویژگیها:
Countمتدها:DeleteByName،FindByName،IndexOfName - TXLSXImages: تصاویر تعبیهشده را در دسترس قرار میدهد. ویژگیها:
Countمتدها:DeleteAt،DeleteInRange،FindAt،IndexOfCell - TXLSXTables: جدولهای Excel را در دسترس قرار میدهد. ویژگیها:
Countمتدها:AddExisting،DeleteByName،FindByName،IndexOfName
ویژگیهای پشتیبانیشده
- ویژگیهای سند (
Workbook.Title،Author،Subject،Keywords،Description،LastModifiedBy،Companyو غیره) نوشتهشده درdocProps/core.xml+docProps/app.xml - محافظت با گذرواژه کاربرگ / کارپوشه (هش ۱۶ بیتی قدیمی) از طریق
Worksheet.Protect/Workbook.ProtectWorkbook؛ ذخیرهسازی سازگار با Excel محافظتشده با گذرواژه AES از طریقSaveAsEncrypted، با استفاده از شتابدهنده AES-NI در صورت وجود و در غیر این صورت استفاده از پشتیبان نرمافزاری پرتابل. متدOpenEncryptedهمچنان تا زمان پیادهسازی پشتیبانی از رمزگشایی، برای بستههای رمزگذاریشده استثنا ایجاد میکند - حفظ پروژه VBA از طریق
Workbook.LoadVbaProjectFromFile/VbaProject؛ بایتها بدون تغییر در رفت و برگشت حفظ میشوند. دادههای معتبرvbaProject.binنیز میتوانند از طریقWorkbook.ParsedVBAProjectبررسی شوند - نمودارها — ستونی / میلهای / خطی / دایرهای / مساحتی / دونات از طریق TXLSXChart، متصل روی یک کاربرگ (
Worksheet.AddChart) یا تمامصفحه روی یک برگ نمودار اختصاصی از طریقWorkbook.AddChartSheet(Name, Type, Title) - سلولهای متن غنی از طریق TXLSXRichText با قالببندی فونت برای هر بخش؛ در رفت و برگشت از طریق جدول رشتههای مشترک حفظ میشوند
- لنگرهای ابرپیوند داخلی از طریق
Worksheet.AddHyperlinkToCell(Row, Col, "Sheet2!A1")(بدون نیاز به ارتباط فایلهای rels) - API کپی / انتقال / پاک کردن محدوده سلول در کاربرگ (
CopyRange،CopyRangeTo،MoveRange،ClearRange) - تراز سلول از طریق TXLSXAlignment +
AlignmentIndexبرای هر سلول - رنگ زبانه کاربرگ از طریق
Worksheet.TabColor/TabColorIsAuto - حالت نمای کاربرگ از طریق
Worksheet.View، شامل نمای عادی، پیشنمایش فواصل صفحات و نمای چیدمان صفحه - مسیر SaveAs جریانی (
Workbook.StreamingWrite := True) که هر کاربرگ را بدون نگه داشتن بقیه در حافظه ساخته و مینویسد؛ انباشتگر XML در هر ردیف ازTXLSWideStringBuilderاستفاده میکند تا حلقه سلول خطی باقی بماند - متد رفت و برگشتی
Openبرای همه موارد فوق به جز بستههای XLSX رمزگذاریشده و شناسایی برگ در برگ نمودار,که به رفتار جزئی سندسازیشده رجوع میکنند - خروجی و ورود مبتنی بر جریان:
SaveAs(Stream)،Open(Stream)برای استفاده در حافظه یا فیلدهای BLOB - خواندن/نوشتن OpenDocument Spreadsheet: متدهای
Workbook.OpenODSو متد عمومیWorkbook.Openمیتوانند بستههای.odsرا بارگذاری کنند، در حالی کهWorkbook.SaveAsODSوSaveAs(..., xlsxOpenDocumentSpreadsheet)خروجی ODS را مستقیماً مینویسند. سطح قالب شامل مقادیر، فرمولها، سبکها، متن غنی,ابعاد ردیف/ستون، ادغامها، ابرپیوندها، تصاویر، نمودارها,محدودههای نامگذاریشده، فیلتر خودکار، قالبهای شرطی، اعتبار سنجیهای داده، فریمهای ثابتشده، تنظیمات صفحه، سرصفحه/پاورقی، محدودههای چاپ، فواصل صفحات، گروههای طرح کلی، رنگ زبانه و نمایانی برگ در کل رفت و برگشتهای پشتیبانیشده است - گزینههای خروجی ODS: ارسال
TODSExportOptionsبهSaveAsODSبرای بازنویسی رشته تولیدکننده سند یا سرکوب بخشهای نمودار و تصویر هنگام ایجاد یک بسته سبکتر - ورود متن جداشده: متدهای
Workbook.OpenCSV(FileName)وWorkbook.OpenCSV(Stream)دادههای CSV یا TSV را با تشخیص جداکننده، تشخیص کدگذاری BOM، نقلقول به سبک RFC 4180 و استنتاج نوع مقدار اختیاری وارد میکنند. متدOpen(FileName)فایلهای.csvو.tsvرا به طور خودکار به واردکننده هدایت میکند - اسکن متادیتای کارپوشه: متدهای
Workbook.GetSheetNames(FileName, List)وWorkbook.GetSheetNames(Stream, List)نامهای برگ مرتبشده را ازxl/workbook.xmlبدون بارگذاری XML کاربرگ میخوانند - محافظت سلول: ویژگیهای
TXLSXCell.LockedوFormulaHidden— کنترل میکنند که کدام سلولها قابل ویرایش هستند یا فرمولهای آنها در زمان محافظت از برگ نمایان هستند - برازش خودکار عرض ستون و ارتفاع ردیف از محتوای سلول:
Worksheet.AutoFitColumn،AutoFitColumns،AutoFitRow،AutoFitRows - درج و حذف ردیف / ستون با آبشار کامل:
InsertRows،DeleteRows،InsertCols،DeleteCols. اثرات جانبی از طریق سلولها، محدودههای ادغامشده، ابرپیوندها، کامنتها,فریم ثابتشده، ارجاعهای رشته-محدوده، جدولها، فرمولهای سلول,فرمولهای قالببندی شرطی / اعتبار سنجی داده، اهداف ابرپیوند داخلی، ارجاعهای تنظیمات چاپ، فواصل صفحات دستی، معیارهای ستون فیلتر خودکار، محدودههای سری نمودار، نامهای تعریفشده، لنگرهای تصویر و لنگرهای نمودار منتشر میشوند - تنظیمات صفحه پیشرفته:
PrintArea،PrintTitleRows،PrintTitleCols،PrintGridlines،PrintHeadings،BlackAndWhite،Draft،PrintNotes،PrintOverThenDown - نمایانی برگ:
Worksheet.Visibility(xlsxSheetVisible/xlsxSheetHidden/xlsxSheetVeryHidden) وIsSelected - فواصل صفحات دستی:
AddRowBreak،AddColBreak، جستجوی شاخص و کمککنندههای حذف محدوده - معیارهای ستون فیلتر خودکار:
Worksheet.AddAutoFilterColumnبا قوانین فیلتر تکمعیاره یا ترکیبی (AND/OR) دومعیاره، به همراهWorksheet.AutoFilterColumns.FindByColIdوDeleteByColIdبرای جستجو و حذف مستقیم معیارها (TXLSXAutoFilterColumn) - مبنای تاریخ کارپوشه:
Workbook.Date1904بین مبدأ تاریخ ۱۹۰۰ (پیشفرض ویندوز) و ۱۹۰۴ (مک) سوئیچ میکند - حاشیههای مورب: ویژگیهای
TXLSXBorder.DiagonalUpوDiagonalDownخطوط مورب را فعال میکنند؛ لبهDiagonalحامل سبک و رنگ است - ویژگیهای فونت پیشرفته:
TXLSXFont.VertAlign(بالانویس / زیرنویس)،OutlineFont،Shadow،Family،CharSet - متادیتای محدوده نامگذاریشده:
TXLSXDefinedName.HiddenوComment - گزینههای نمای برگ:
Worksheet.Zoom،DisplayGridLines،DisplayZeros،DisplayRightToLeft،StandardWidth،StandardHeight - پالت رنگهای شاخصگذاریشده قدیمی OOXML:
Workbook.IndexedColor[0..63]به همراهResetIndexedColors - پیوندهای کارپوشه خارجی:
Workbook.ExternalLinks/ TXLSXExternalLink — رفت و برگشت متادیتای URL هدف + SheetNames - پشتیبانی از رنگ تم در
TXLSXFont،TXLSXFillوTXLSXBorderEdge: ویژگیهایColorTheme/ColorIndex/TintAndShadeبا اولویتبندی (تم > شاخصگذاریشده > RGB) - خروجی CSV: متد
Workbook.SaveAsCSV— ۴ بارگذاری چندگانه (FileName یا Stream در برگ فعال / SheetIndex صریح + Delimiter)، کدگذاری UTF-8 با BOM، نقلقول RFC 4180 - خروجی HTML: متدهای
Workbook.SaveAsHTMLوTXLSXRange.SaveAsHTMLجدولهای HTML5 را برای کل برگ کارپوشه یا فقط مستطیل انتخابشده مینویسند. بارگذاریهای چندگانه گزینهها، کلاسTXLSXHtmlExportOptionsرا برای خروجی کامل سند، صدور سبک,صدور BOM و نامگذاری کلاس جدول میپذیرند - خروجی RTF: متد
Workbook.SaveAsRTF— ۴ بارگذاری چندگانه، جدول RTF 1.6 با عرض ستونها، قالببندی فونت برای هر سلول و یونیکد تمامBMP از طریق کدهای گریز ۱۶ بیتی علامتدار\uN?
زیرساخت مشترک
هر دو نما از مجموعه مشترکی از واحدهای کمکی سطح پایین استفاده میکنند,به این معنی که توصیفگرهای سبک، جدولهای هش، درختهای AVL، ورودی/خروجی ZIP و XML، تبدیلهای RGB به HLS و سازندههای رشته یک بار نوشته شده و توسط هر دو مسیر استفاده میشوند. کمککنندههای مشترک عبارتند از:
lxStyleXf،lxStyleFont،lxStyleColor،lxStyleFill،lxStyleBorder— توصیفگرهای سبک مدرنlxRgb— تبدیل رنگ RGB / HLSlxHashTable،lxKeyList،lxAvlTree،lxCols،lxRows— ظروف حذف موارد تکراری و بلوکهای ساختمانی پشته سلول مبتنی بر AVLlxXmlReader،lxXmlWriter،lxZipArchive— لایه انتقال OOXMLlxStrBuilder،lxCacheStream،lxWStream،lxZlibStream— کمککنندههای مونتاژ جریان و رشته