جداول برای سازماندهی اطلاعات و ارقام مفید هستند. ما اغلب جداول را در اسناد word (DOCX/DOC) برای نمایش اطلاعات وارد می‌کنیم. در یک برنامه پردازش کلمه، می توانید به راحتی جداول را با استفاده از C++ ایجاد کنید. برای یادگیری کار با جداول در اسناد Word می توانید از مثال های زیر استفاده کنید:

اجازه دهید به بررسی همه این موضوعات با جزئیات بپردازیم:

درج جداول در Word Documents API

ابتدا، لطفاً توجه داشته باشید که از Aspose.Words for C++ API برای درج جداول در یک سند word استفاده خواهید کرد. می‌توانید API را با دانلود از New Releases یا از طریق گالری NuGet پیکربندی کنید. هنگامی که به درستی پیکربندی شد، می‌توانید به سادگی از روش‌ها، ویژگی‌ها و کلاس‌هایی که توسط API در معرض دید قرار گرفته‌اند، استفاده کنید تا بتوان از چند فراخوان ساده API برای ایجاد، ویرایش یا دستکاری اسناد Microsoft Word مانند فایل‌های DOCX یا DOC استفاده کرد.

با استفاده از C++ یک جدول در اسناد Word وارد کنید

با چند مرحله ساده می توانید جدولی را در اسناد word وارد کنید. با این حال، در اینجا مهم است که توجه داشته باشید که باید شی document را به سازنده هر گره منتقل کنید تا همه گره های فرزند متعلق به یک شی باشند. شما باید مراحل ذکر شده در زیر را دنبال کنید:

  1. شیء کلاس Document را مقداردهی کنید
  2. شیء جدول را ایجاد کنید
  3. جدول را به سند اضافه کنید
  4. سطر و ستون ایجاد کنید
  5. AutoFit را روی سلول‌های جدول اعمال کنید
  6. ذخیره خروجی سند Word

قطعه کد زیر نحوه درج جدول را در سند Word (DOCX/DOC) با استفاده از C++ نشان می دهد:

// مسیر دایرکتوری اسناد
System::String outputDataDir = dataDir;
System::SharedPtr<Document> doc = System::MakeObject<Document>();

// با ایجاد شی جدول شروع می کنیم. توجه داشته باشید که چگونه باید شی document را پاس کنیم
// به سازنده هر گره. این به این دلیل است که هر گره ای که ایجاد می کنیم باید متعلق باشد
// به یک سند
System::SharedPtr<Table> table = System::MakeObject<Table>(doc);

// جدول را به سند اضافه کنید.
doc->get_FirstSection()->get_Body()->AppendChild(table);

// در اینجا می‌توانیم EnsureMinimum را فراخوانی کنیم تا ردیف‌ها و سلول‌ها را برای ما ایجاد کند. این روش استفاده می شود
// برای اطمینان از معتبر بودن گره مشخص شده، در این مورد یک جدول معتبر باید حداقل یکی داشته باشد
// ردیف و یک سلول، بنابراین این روش آنها را برای ما ایجاد می کند.
// درعوض ما خودمان با ایجاد سطر و جدول کار خواهیم کرد. این بهترین راه برای انجام این کار خواهد بود
// به عنوان مثال، اگر در حال ایجاد یک جدول در داخل یک الگوریتم باشیم.
System::SharedPtr<Row> row = System::MakeObject<Row>(doc);
row->get_RowFormat()->set_AllowBreakAcrossPages(true);
table->AppendChild(row);

// اکنون می‌توانیم تنظیمات مربوط به خودکار را اعمال کنیم.
table->AutoFit(AutoFitBehavior::FixedColumnWidths);

// یک سلول ایجاد کنید و آن را به ردیف اضافه کنید
System::SharedPtr<Cell> cell = System::MakeObject<Cell>(doc);
cell->get_CellFormat()->get_Shading()->set_BackgroundPatternColor(System::Drawing::Color::get_LightBlue());
cell->get_CellFormat()->set_Width(80);

// یک پاراگراف به سلول و همچنین اجرای جدید با مقداری متن اضافه کنید.
cell->AppendChild(System::MakeObject<Paragraph>(doc));
cell->get_FirstParagraph()->AppendChild(System::MakeObject<Run>(doc, u"Row 1, Cell 1 Text"));

// سلول را به ردیف اضافه کنید.
row->AppendChild(cell);

// سپس این فرآیند را برای سایر سلول‌ها و ردیف‌های جدول تکرار می‌کنیم.
// همچنین می‌توانیم با شبیه‌سازی سلول‌ها و ردیف‌های موجود، سرعت کار را افزایش دهیم.
row->AppendChild((System::StaticCast<Node>(cell))->Clone(false));
row->get_LastCell()->AppendChild(System::MakeObject<Paragraph>(doc));
row->get_LastCell()->get_FirstParagraph()->AppendChild(System::MakeObject<Run>(doc, u"Row 1, Cell 2 Text"));
System::String outputPath = outputDataDir + u"InsertTableDirectly.doc";

// سند را روی دیسک ذخیره کنید.
doc->Save(outputPath);

درج جدول از HTML در اسناد Word با استفاده از C++

این امکان وجود دارد که یک فایل HTML حاوی جدولی باشد که باید آن را در اسناد word خود مانند DOCX، DOC و غیره وارد کنید. یا ممکن است لازم باشد یک جدول را از یک وب سایت کپی کنید. بنابراین به جای ایجاد و طراحی جدول از ابتدا، می توانید به راحتی نشانه گذاری HTML را به عنوان یک جدول به سند word تجزیه کنید. به عنوان مثال، می توانید با استفاده از رشته HTML زیر یک جدول را به سند word اضافه کنید:

<table><tr><td>Row 1, Cell 1</td><td>Row 1, Cell 2</td></tr><tr><td>Row 2, Cell 1</td><td>Row 2, Cell 2</td></tr></table>

ما محتویات را ساده نگه داشته ایم تا بتوان پشتیبانی از برچسب جدول را با استفاده از موارد اساسی و در عین حال مهم نشان داد. علاوه بر این، در اینجا مهم است که توجه داشته باشید که AutoFit را نمی توان در جداول ایجاد شده از HTML اعمال کرد.

اجازه دهید مراحل زیر را برای درج جدول HTML در سند Word دنبال کنیم:

  1. نمونه ای از کلاس Document را راه اندازی کنید
  2. علامت گذاری HTML را با روش InsertHtml ارسال کنید
  3. فایل word خروجی DOCX را ذخیره کنید

کد زیر این مراحل را دنبال می کند و نحوه ایجاد جدول در سند Word با HTML با استفاده از C++ را نشان می دهد:

// مسیر دایرکتوری اسناد
System::String outputDataDir = dataDir;
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);

// جدول را از HTML درج کنید. توجه داشته باشید که AutoFitSettings برای جداول اعمال نمی شود
// از HTML درج شده است.
builder->InsertHtml(u"<table><tr><td>Row 1, Cell 1</td><td>Row 1, Cell 2</td></tr><tr><td>Row 2, Cell 1</td><td>Row 2, Cell 2</td></tr></table>");

System::String outputPath = outputDataDir + u"InsertTableFromHtml.doc";
// سند را روی دیسک ذخیره کنید.
doc->Save(outputPath);

می توانید متوجه شوید که این روش کمی ساده تر از روشی است که در بالا بررسی کردیم. دلیل آن این است که نیازی نیست هر گره را یکی یکی برای سطرها، ستون ها یا سلول ها اضافه کنید زیرا تگ Table در رشته HTML حاوی تمام اطلاعات است. در زیر تصویری از این جدول ساده HTML اضافه شده به سند Word را مشاهده می کنید:

درج جدول در Word

درج جدول با استفاده از Document Builder در C++

بهترین چیز در مورد Aspose.Words for C++ API این است که ویژگی‌های مختلفی را ارائه می‌کند که به مزیت رقابتی برای API تبدیل می‌شود و آن را در میان گزینه‌های دیگر متمایز می‌کند. به همین ترتیب، ویژگی درج جدول با استفاده از سازنده سند، رویکرد دیگری برای افزودن جداول در اسناد word (DOC/DOCX) است. بنابراین اجازه دهید جزئیات را از سه منظر مختلف بررسی کنیم:

1) جدول ساده را در DOCX با Document Builder با استفاده از C++ وارد کنید

برای افزودن یک جدول ساده در سند word با Document builder، باید مراحل زیر را دنبال کنید:

  1. ایجاد Document Object
  2. متد StartTable() را فراخوانی کرده و سلول‌ها را وارد کنید
  3. ردیف و سلول ها را اضافه کنید
  4. فایل خروجی DOCX را ذخیره کنید

علاوه بر این، قطعه کد زیر نحوه درج جدول ساده را در فایل DOCX با C++ نشان می دهد:

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);

// ما این روش را برای شروع ساخت جدول فراخوانی می کنیم.
builder->StartTable();
builder->InsertCell();
builder->Write(u"Row 1, Cell 1 Content.");

// سلول دوم را بسازید
builder->InsertCell();
builder->Write(u"Row 1, Cell 2 Content.");

// برای پایان دادن به ردیف و شروع یک ردیف جدید، روش زیر را فراخوانی کنید.
builder->EndRow();

// اولین سلول ردیف دوم را بسازید.
builder->InsertCell();
builder->Write(u"Row 2, Cell 1 Content");

// سلول دوم را بسازید.
builder->InsertCell();
builder->Write(u"Row 2, Cell 2 Content.");
builder->EndRow();

// علامت دهید که ساخت جدول را به پایان رسانده ایم.
builder->EndTable();
System::String outputPath = outputDataDir + u"InsertTableUsingDocumentBuilder.SimpleTable.doc";

// سند را روی دیسک ذخیره کنید.
doc->Save(outputPath);

2) جدول فرمت شده را در DOCX با Document Builder با استفاده از C++ وارد کنید

با انجام مراحل زیر می توانید یک جدول قالب بندی شده را در یک سند word وارد کنید:

  1. نمونه ای از کلاس Document را راه اندازی کنید
  2. ردیف سرصفحه ایجاد کنید
  3. تورفتگی ها و ویژگی ها را برای قالب بندی تنظیم کنید
  4. بازنشانی قالب بندی فونت
  5. فایل خروجی Word DOCX را ذخیره کنید

قطعه کد زیر جدول فرمت شده را در فایل DOCX با استفاده از C++ ایجاد می کند:

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
System::SharedPtr<Table> table = builder->StartTable();

// ردیف سرصفحه را بسازید.
builder->InsertCell();

// تورفتگی سمت چپ را برای جدول تنظیم کنید. قالب بندی گسترده جدول باید بعد از آن اعمال شود
// حداقل یک ردیف در جدول وجود دارد.
table->set_LeftIndent(20.0);

// ارتفاع را تنظیم کرده و قانون ارتفاع را برای ردیف سرصفحه تعریف کنید.
builder->get_RowFormat()->set_Height(40.0);
builder->get_RowFormat()->set_HeightRule(HeightRule::AtLeast);

// برخی از ویژگی های خاص برای ردیف سرصفحه.
builder->get_CellFormat()->get_Shading()->set_BackgroundPatternColor(System::Drawing::Color::FromArgb(198, 217, 241));
builder->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Center);
builder->get_Font()->set_Size(16);
builder->get_Font()->set_Name(u"Arial");
builder->get_Font()->set_Bold(true);
builder->get_CellFormat()->set_Width(100.0);
builder->Write(u"Header Row,\n Cell 1");

// ما نیازی به تعیین عرض این سلول نداریم زیرا از سلول قبلی به ارث رسیده است.
builder->InsertCell();
builder->Write(u"Header Row,\n Cell 2");
builder->InsertCell();
builder->get_CellFormat()->set_Width(200.0);
builder->Write(u"Header Row,\n Cell 3");
builder->EndRow();

// ویژگی ها را برای ردیف ها و سلول های دیگر تنظیم کنید.
builder->get_CellFormat()->get_Shading()->set_BackgroundPatternColor(System::Drawing::Color::get_White());
builder->get_CellFormat()->set_Width(100.0);
builder->get_CellFormat()->set_VerticalAlignment(CellVerticalAlignment::Center);

// ارتفاع را بازنشانی کنید و یک قاعده ارتفاع متفاوت برای بدنه جدول تعریف کنید
builder->get_RowFormat()->set_Height(30.0);
builder->get_RowFormat()->set_HeightRule(HeightRule::Auto);
builder->InsertCell();

// بازنشانی قالب بندی فونت
builder->get_Font()->set_Size(12);
builder->get_Font()->set_Bold(false);

// سلول های دیگر را بسازید.
builder->Write(u"Row 1, Cell 1 Content");
builder->InsertCell();
builder->Write(u"Row 1, Cell 2 Content");
builder->InsertCell();
builder->get_CellFormat()->set_Width(200.0);
builder->Write(u"Row 1, Cell 3 Content");
builder->EndRow();
builder->InsertCell();
builder->get_CellFormat()->set_Width(100.0);
builder->Write(u"Row 2, Cell 1 Content");
builder->InsertCell();
builder->Write(u"Row 2, Cell 2 Content");
builder->InsertCell();
builder->get_CellFormat()->set_Width(200.0);
builder->Write(u"Row 2, Cell 3 Content.");
builder->EndRow();
builder->EndTable();
System::String outputPath = outputDataDir + u"InsertTableUsingDocumentBuilder.FormattedTable.doc";

// سند را روی دیسک ذخیره کنید.
doc->Save(outputPath);

3) جدول تودرتو را در DOCX با Document Builder با استفاده از C++ وارد کنید

گاهی اوقات ما به جدول دیگری در یک جدول موجود نیاز داریم. به عنوان مثال، یک سلول در برخی از ردیف ها یا ستون های یک جدول می تواند شامل یک جدول فرعی برای یک زیر مجموعه یا یک فیلد دیگر باشد. در چنین سناریوهایی، جداول Nested مفید هستند که می توانند با دنبال کردن مراحل زیر اضافه شوند:

  1. بیرونی Table را بسازید و سپس روش EndTable را فراخوانی کنید
  2. جدول داخلی را در داخل سلولی از جدول بیرونی بسازید
  3. ذخیره سند word خروجی

قطعه کد زیر نحوه درج جدول تودرتو در سند Word را با استفاده از C++ نشان می دهد:

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);

// میز بیرونی را بسازید.
System::SharedPtr<Cell> cell = builder->InsertCell();
builder->Writeln(u"Outer Table Cell 1");
builder->InsertCell();
builder->Writeln(u"Outer Table Cell 2");

// این فراخوانی برای ایجاد یک جدول تودرتو در اولین جدول مهم است
// بدون این فراخوانی، سلول های درج شده در زیر به جدول بیرونی اضافه می شوند.
builder->EndTable();

// به خانه اول جدول بیرونی بروید.
builder->MoveTo(cell->get_FirstParagraph());

// میز داخلی را بسازید.
builder->InsertCell();
builder->Writeln(u"Inner Table Cell 1");
builder->InsertCell();
builder->Writeln(u"Inner Table Cell 2");
builder->EndTable();
System::String outputPath = outputDataDir + u"InsertTableUsingDocumentBuilder.NestedTable.doc";

// سند را روی دیسک ذخیره کنید.
doc->Save(outputPath);

نتیجه

به طور خلاصه، ما یاد گرفتیم که چگونه جداول مختلف را با استفاده از رویکردهای مختلف در اسناد Word وارد کنیم. می توانید جدول ساده یا با رشته HTML و همچنین جداول فرمت شده و تودرتو را در اسناد word (DOC/DOCX) وارد کنید. با این حال، در صورت هرگونه سردرگمی یا پرس و جو، می توانید با ما در تالارهای پشتیبانی رایگان تماس بگیرید. علاوه بر این، می توانید برای مرجع مهربان خود به مرجع API و مستندات محصول نیز مراجعه کنید.

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