کار با جداول

کار با جدول‌ها

جداول در Aspose.Words FOSS برای .NET به وسیلهٔ Aspose.Words.Tables فضای‌نام: Table, Row، و Cell یک سلسله‌مراتبی سه‌سطحی ترکیبی از نودها تشکیل می‌دهند که در درخت سند همراه با پاراگراف‌ها قرار می‌گیرد. این صفحه ساخت جداول با DocumentBuilder، قالب‌بندی ردیف‌ها و سلول‌ها، کنترل چیدمان کلی جدول، و ادغام سلول‌ها.


مدل شیء جدول

یک Table یک CompositeNode است که شامل گره‌های Row می‌شود، و هر Row یک CompositeNode است که شامل گره‌های Cell می‌شود؛ یک Cell به نوبه خود شامل پاراگراف‌ها و، در صورت امکان، جدول‌های تو در تو است. Table.Rows یک RowCollection برمی‌گرداند، Row.Cells یک CellCollection برمی‌گرداند، و یک Body یا سایر Story هر جدول سطح-بالای موجود در آن را از طریق ویژگی Tables خود، که یک TableCollection است، نشان می‌دهد. هر سه مجموعه از Add()، Insert()، Remove()، RemoveAt()، Contains() و IndexOf() پشتیبانی می‌کنند. Table.EnsureMinimum()، Row.EnsureMinimum() و Cell.EnsureMinimum() به ترتیب کوچک‌ترین محتوای معتبر مورد نیاز یک گره از آن نوع (یک ردیف خالی، یک سلول خالی یا یک پاراگراف خالی) را پس از ویرایش‌های برنامه‌نویسی که یکی از آنها را بدون این محتوا می‌گذارد، پر می‌کنند.


ساخت جدول‌ها با DocumentBuilder

DocumentBuilder.StartTable() یک جدول جدید را در مکان‌نما آغاز می‌کند، InsertCell() یک سلول به ردیف جاری اضافه می‌کند، EndRow() ردیف جاری را می‌بندد و EndTable() جدول را می‌بندد. قبل از فراخوانی InsertCell() یا EndRow()، DocumentBuilder.CellFormat و DocumentBuilder.RowFormat را تنظیم کنید تا قالب‌بندی پیش‌فرض به سلول‌ها و ردیف‌ها هنگام ایجاد آنها اعمال شود – این خصوصیات به‌عنوان قالبی برای محتوایی که سازنده بعداً وارد می‌کند عمل می‌کنند، نه تغییری پس‌زمینه‌ای برای سلول‌های موجود در سند.


قالب‌بندی سلول و ردیف

Cell.CellFormat یک نمونه CellFormat است (Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth, LeftPadding, RightPadding, TopPadding, BottomPadding, HideMark, Orientation) که دارای ClearFormatting() برای بازنشانی آن و SetPaddings() برای تنظیم همزمان چهار پد سلول است. Row.RowFormat یک نمونه RowFormat است (Borders, Height, HeightRule, AllowBreakAcrossPages, HeadingFormat) که ClearFormatting() خود را دارد.


قالب‌بندی سراسری جدول و AutoFit

Table خود ویژگی‌های چیدمان را افشا می‌کند – Alignment (TableAlignment)، Bidi، LeftIndent، PreferredWidth، Style، StyleIdentifier، StyleName، StyleOptions (TableStyleOptions)، TextWrapping، و فراداده‌های دسترسی از طریق Title و Description. Table.AutoFit(AutoFitBehavior) اندازه جدول و سلول‌های آن را بر اساس رفتار داده‌شده تغییر اندازه می‌دهد. SetBorder() یک طرف حاشیه را تنظیم می‌کند و SetBorders() تمام حاشیه‌ها را به یک سبک خط، عرض و رنگ یکسان در کل جدول تنظیم می‌کند؛ ClearBorders() و ClearShading() آن‌ها را بازنشانی می‌کنند. ConvertToHorizontallyMergedCells() سلول‌هایی که با تطبیق عرض ادغام شده بودند را به سلول‌هایی تبدیل می‌کند که به‌صورت صریح با HorizontalMerge علامت‌گذاری شده‌اند.


عرض‌های ترجیحی و سلول

PreferredWidth نمایانگر یک عرض و واحد آن است که با متدهای کارخانه ایستا PreferredWidth.FromPercent() یا PreferredWidth.FromPoints() ساخته می‌شود؛ PreferredWidthType تعیین می‌کند که چه نوع مقداری (Auto، Percent یا Points) یک PreferredWidth داده‌شده نگه می‌دارد. هر دو Table.PreferredWidth و CellFormat.PreferredWidth این مقادیر را می‌پذیرند.


سلول‌های ادغام‌شده

CellFormat.HorizontalMerge و CellFormat.VerticalMerge (CellMerge) مشخص می‌کنند که یک سلول چگونه در یک ادغام افقی یا عمودی با همسایه‌های خود مشارکت می‌کند. CellVerticalAlignment نحوه توزیع محتوا در داخل سلول را به صورت عمودی کنترل می‌کند، بدون در نظر گرفتن هر وضعیت ادغام.


نکات و بهترین روش‌ها

  • هر StartTable() را با یک EndRow() متناظر در هر ردیف و یک EndTable() نهایی ببندید – یک ردیف یا جدول بدون بسته شدن، وضعیت داخلی سازنده (و درخت سند تولید‌شده) را خراب می‌کند.
  • قبل از هر فراخوانی InsertCell() یا EndRow()، DocumentBuilder.CellFormat و DocumentBuilder.RowFormat را تنظیم کنید اگر ردیف‌ها یا سلول‌های مختلف در همان جدول نیاز به قالب‌بندی متفاوت دارند؛ سازنده هر آنچه در لحظهٔ درج تنظیم شده باشد را اعمال می‌کند.
  • پس از حذف محتوا به‌صورت برنامه‌نویسی، Table.EnsureMinimum()، Row.EnsureMinimum() یا Cell.EnsureMinimum() را فراخوانی کنید تا گره حداقل ساختار معتبر مورد انتظار Word را حفظ کند.
  • از PreferredWidth.FromPercent() برای جدول‌هایی که باید با عرض صفحهٔ موجود سازگار شوند استفاده کنید، و برای عرض ثابت طرح از PreferredWidth.FromPoints() بهره ببرید.
  • AutoFitBehavior زمانی که Table.AutoFit() را صدا می‌زنید اعمال می‌شود – به‌صورت مداوم هنگام افزودن یا حذف محتوا دوباره اجرا نمی‌شود، بنابراین پس از ویرایش‌های قابل توجه دوباره آن را فراخوانی کنید اگر نیاز به تنظیم مجدد جدول دارید.

مسائل رایج

مسئلهدلیلرفع
جدول به‌نظر خراب می‌رسد یا هنگام ذخیره‌سازی خطا می‌دهدیک ردیف یا جدول هرگز با EndRow() / EndTable() بسته نشده استهمیشه StartTable() را با یک EndTable() نهایی جفت کنید و هر ردیف را با EndRow() ببندید
سلول‌های جدید قالب‌بندی‌ای که تنظیم کرده‌ام را دریافت نمی‌کنندCellFormat / RowFormat پس از اینکه سلول‌ها وارد شده بودند، در سازنده تغییر یافتندDocumentBuilder.CellFormat / RowFormat را قبل از فراخوانی InsertCell() / EndRow() برای آن محتوا تنظیم کنید
جدول پس از ویرایش‌ها به‌گونه‌ای که انتظار دارم تغییر اندازه نمی‌دهدAutoFit() وضعیت جدول را در لحظه‌ای که فراخوانی می‌شود منعکس می‌کند، نه به‌صورت پیوستهپس از ویرایش‌های ساختاری، Table.AutoFit(AutoFitBehavior) را دوباره فراخوانی کنید
سلول‌های مجاور که به‌نظر می‌رسد ترکیب شده‌اند، به‌عنوان سلول‌های جداگانه رفتار می‌کنندسلول‌ها فقط بر اساس عرض مطابقت داده شدند و با CellMerge علامت‌گذاری نشدندمتد Table.ConvertToHorizontallyMergedCells() را فراخوانی کنید یا CellFormat.HorizontalMerge / VerticalMerge را به‌طور صریح تنظیم کنید

FAQ

چگونه می‌توانم یک جدول را از ابتدا با DocumentBuilder بسازم؟

متد StartTable() را فراخوانی کنید، سپس برای هر سلول در یک ردیف InsertCell()، EndRow() برای بستن ردیف، برای ردیف‌های اضافه تکرار کنید، و در نهایت EndTable() برای بستن جدول.

چگونه عرض جدول را به‌جای عرض ثابت، به‌صورت درصدی تنظیم کنم؟

Table.PreferredWidth = PreferredWidth.FromPercent(value) را به‌جای PreferredWidth.FromPoints(value) اختصاص دهید.

چگونه تمام قالب‌بندی‌ها را در یک سلول یا ردیف بازنشانی کنم؟

متد CellFormat.ClearFormatting() را بر روی CellFormat یک سلول فراخوانی کنید، یا RowFormat.ClearFormatting() را بر روی RowFormat یک ردیف.

چگونه حاشیه‌ها و سایه‌گذاری را برای کل جدول به‌صورت یکجا تنظیم کنم؟

از Table.SetBorders() برای حاشیه یکنواخت در همه طرف‌ها، از Table.SetBorder() برای یک طرف به‌صورت جداگانه، و از Table.SetShading() برای سایه‌گذاری یکنواخت استفاده کنید؛ ClearBorders() و ClearShading() برای بازنشانی آن‌ها استفاده می‌شوند.


خلاصه API Reference

کلاس / شمارشتوضیح
Tableگره جدول؛ Rows, AutoFit(), SetBorders(), SetShading(), PreferredWidth
Rowگره ردیف جدول؛ Cells, RowFormat, EnsureMinimum()
Cellگرهٔ سلول جدول؛ CellFormat, EnsureMinimum()
TableCollection / RowCollection / CellCollectionمجموعه‌های نوعی از گره‌های Table / Row / Cell
CellFormatقالب‌بندی به ازای هر سلول: حاشیه‌ها، سایه‌گذاری، پدینگ، وضعیت ادغام، تراز عمودی
RowFormatقالب‌بندی به ازای هر ردیف: حاشیه‌ها، ارتفاع، رفتار شکست صفحه
PreferredWidth / PreferredWidthTypeمقدار عرض جدول یا سلول و واحد آن (auto, percent, points)
AutoFitBehaviorچگونه Table.AutoFit() یک جدول و سلول‌های آن را تغییر اندازه می‌دهد
CellMerge / CellVerticalAlignmentوضعیت ادغام سلول افقی/عمودی و تراز عمودی محتوا
TableAlignment / TableStyleOptions / TextWrappingتراز سراسری جدول، اعمال سبک، و رفتار پیچش متن
DocumentBuilder.StartTable / InsertCell / EndRow / EndTableساخت جدول مبتنی بر مکان‌نما

همچنین ببینید:

 فارسی