جداول محوری داده‌ها را دوباره مرتب می‌کنند تا آن‌ها را به شیوه‌ای معنی‌دار نشان دهند. آنها گزینه های مختلف مرتب سازی را ارائه می دهند و با گروه بندی داده ها با یکدیگر، مبالغ، میانگین ها یا سایر آمارها را ارائه می دهند. این یک ابزار ضروری برای تجزیه و تحلیل داده ها است و بخش اساسی MS Excel است. ممکن است خود را در سناریوهایی بیابید که باید جداول محوری را به صورت برنامه ریزی شده ایجاد و دستکاری کنید. برای این منظور، این مقاله نحوه کار با جداول محوری در فایل های اکسل را با استفاده از C++ به شما آموزش می دهد.

C++ API برای کار با Pivot Tables در فایل های Excel

Aspose.Cells for C++ یک کتابخانه بومی C++ است که به شما امکان می‌دهد بدون نیاز به نصب Microsoft Excel فایل‌های Excel را ایجاد، بخوانید و به‌روزرسانی کنید. API همچنین از کار با جداول محوری در فایل های اکسل پشتیبانی می کند. می‌توانید API را از طریق NuGet نصب کنید یا آن را مستقیماً از بخش Downloads دانلود کنید.

PM> Install-Package Aspose.Cells.Cpp

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

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

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

// مسیر دایرکتوری منبع.
StringPtr srcDir = new String("SourceDirectory\\");

// مسیر دایرکتوری خروجی
StringPtr outDir = new String("OutputDirectory\\");

// یک نمونه از کلاس IWorkbook ایجاد کنید
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

// به اولین کاربرگ دسترسی پیدا کنید
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// داده های منبع را برای جدول محوری اضافه کنید
intrusive_ptr<String> str = new String("Fruit");
worksheet->GetICells()->GetObjectByIndex(new String("A1"))->PutValue(str);
str = new String("Quantity");
worksheet->GetICells()->GetObjectByIndex(new String("B1"))->PutValue(str);
str = new String("Price");
worksheet->GetICells()->GetObjectByIndex(new String("C1"))->PutValue(str);
str = new String("Apple");
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(str);
str = new String("Orange");
worksheet->GetICells()->GetObjectByIndex(new String("A3"))->PutValue(str);
str = new String("Mango");
worksheet->GetICells()->GetObjectByIndex(new String("A4"))->PutValue(str);
worksheet->GetICells()->GetObjectByIndex(new String("B2"))->PutValue(3);
worksheet->GetICells()->GetObjectByIndex(new String("B3"))->PutValue(4);
worksheet->GetICells()->GetObjectByIndex(new String("B4"))->PutValue(4);
worksheet->GetICells()->GetObjectByIndex(new String("C2"))->PutValue(2);
worksheet->GetICells()->GetObjectByIndex(new String("C3"))->PutValue(1);
worksheet->GetICells()->GetObjectByIndex(new String("C4"))->PutValue(4);

// جدول محوری را اضافه کنید
int idx = worksheet->GetIPivotTables()->Add(new String("A1:C4"), new String("E5"), new String("MyPivotTable"));

// به جدول محوری ایجاد شده دسترسی داشته باشید
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(idx);

// ردیف‌ها، ستون‌ها و فیلدهای جدول محوری را دستکاری کنید
pivotTable->AddFieldToArea(PivotFieldType_Row, pivotTable->GetIBaseFields()->GetObjectByIndex(0));
pivotTable->AddFieldToArea(PivotFieldType_Data, pivotTable->GetIBaseFields()->GetObjectByIndex(1));
pivotTable->AddFieldToArea(PivotFieldType_Data, pivotTable->GetIBaseFields()->GetObjectByIndex(2));
pivotTable->AddFieldToArea(PivotFieldType_Column, pivotTable->GetIDataField());

// سبک جدول محوری را تنظیم کنید
pivotTable->SetPivotTableStyleType(PivotTableStyleType_PivotTableStyleMedium9);

// فایل اکسل خروجی را ذخیره کنید
workbook->Save(outDir->StringAppend(new String("outputCreatePivotTable.xlsx")));
تصویر Pivot Table که توسط کد نمونه ایجاد شده است

تصویر Pivot Table که توسط کد نمونه ایجاد شده است

مرتب سازی Pivot Table در یک فایل اکسل با استفاده از C++

در مثال زیر، ستون اول جدول محوری را به ترتیب نزولی مرتب می کنیم. در زیر مراحل مرتب سازی داده ها در جدول محوری آورده شده است.

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

// مسیر دایرکتوری منبع.
StringPtr srcDir = new String("SourceDirectory\\");

// مسیر دایرکتوری خروجی
StringPtr outDir = new String("OutputDirectory\\");

// مسیر فایل اکسل ورودی
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// مسیر فایل اکسل خروجی
StringPtr outputSortedPivotTable = outDir->StringAppend(new String("outputSortedPivotTable.xlsx"));

// نمونه فایل اکسل را بارگیری کنید
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// به اولین کاربرگ دسترسی پیدا کنید
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// به جدول محوری دسترسی پیدا کنید
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);

// مرتب‌سازی جدول محوری را تنظیم کنید
pivotTable->AddFieldToArea(PivotFieldType_Row, 0);
intrusive_ptr<IPivotField> pivotField = pivotTable->GetIRowFields()->GetObjectByIndex(0);
pivotField->SetAutoSort(true);
pivotField->SetAscendSort(false);

// داده های جدول محوری را بازخوانی و محاسبه کنید.
pivotTable->RefreshData();
pivotTable->CalculateData();

// فایل اکسل خروجی را ذخیره کنید
workbook->Save(outputSortedPivotTable);
تصویر جدول محوری مرتب شده که توسط کد نمونه تولید شده است

تصویر جدول محوری مرتب شده که توسط کد نمونه تولید شده است

با استفاده از C++ سطرها را در یک Pivot Table مخفی کنید

با Aspose.Cells for C++ API، می‌توانید ردیف‌ها را در جدول محوری نیز پنهان کنید. در مثال زیر، سطر را با برچسب ردیف “نارنجی” مخفی می کنیم. مراحل زیر برای پنهان کردن ردیف ها در جدول محوری آمده است.

کد نمونه زیر نشان می دهد که چگونه ردیف ها را در یک جدول محوری با استفاده از C++ پنهان کنید.

// مسیر دایرکتوری منبع.
StringPtr srcDir = new String("SourceDirectory\\");

// مسیر دایرکتوری خروجی
StringPtr outDir = new String("OutputDirectory\\");

// مسیر فایل اکسل ورودی
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// مسیر فایل اکسل خروجی
StringPtr outputHiddenRowPivotTable = outDir->StringAppend(new String("outputHiddenRowPivotTable.xlsx"));

// نمونه فایل اکسل را بارگیری کنید
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// به اولین کاربرگ دسترسی پیدا کنید
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// به جدول محوری دسترسی پیدا کنید
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);

// محدوده بدنه جدول محوری را دریافت کنید
intrusive_ptr<ICellArea> dataBodyRange = pivotTable->GetIDataBodyRange();

// ردیف شروع جدول محوری
int currentRow = 5;

// ردیف پایانی جدول محوری
int rowsUsed = dataBodyRange->GetendRow();

// بین سطرها تکرار کنید، مقدار سلول را مقایسه کنید و سطرها را پنهان کنید.
for (int i = currentRow; i < rowsUsed; i++) {
	intrusive_ptr<ICell> cell = worksheet->GetICells()->GetICell(i, 4);
	if (strcmp(cell->GetStringValue()->charValue(), "Orange") == 0) {
		worksheet->GetICells()->HideRow(i);
	}
}

// داده های جدول محوری را بازخوانی و محاسبه کنید.
pivotTable->RefreshData();
pivotTable->CalculateData();

// فایل اکسل خروجی را ذخیره کنید
workbook->Save(outputHiddenRowPivotTable);
تصویر جدول محوری با یک ردیف پنهان

تصویر جدول محوری با یک ردیف پنهان

داده های Pivot Table را با استفاده از C++ دستکاری کنید

همچنین می توانید داده های یک جدول محوری موجود را با استفاده از Aspose.Cells برای C++ API دستکاری کنید. در مثال زیر، متن “Apple” در سلول “A2” را با “Orange” جایگزین می کنیم و تغییر را در جدول محوری منعکس می کنیم. مراحل زیر برای دستکاری داده های جدول محوری آورده شده است.

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

// مسیر دایرکتوری منبع.
StringPtr srcDir = new String("SourceDirectory\\");

// مسیر دایرکتوری خروجی
StringPtr outDir = new String("OutputDirectory\\");

// مسیر فایل اکسل ورودی
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// مسیر فایل اکسل خروجی
StringPtr outputManipulatePivotTable = outDir->StringAppend(new String("outputManipulatePivotTable.xlsx"));

// نمونه فایل اکسل را بارگیری کنید
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// به اولین کاربرگ دسترسی پیدا کنید
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// مقدار سلول A2 را که داخل داده منبع جدول محوری است تغییر دهید
intrusive_ptr<String> str = new String("Orange");
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(str);

// به جدول محوری دسترسی پیدا کنید، آن را به‌روزرسانی و محاسبه کنید
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);
pivotTable->RefreshData();
pivotTable->CalculateData();

// فایل اکسل خروجی را ذخیره کنید
workbook->Save(outputManipulatePivotTable);
جدول محوری که داده های به روز شده را نشان می دهد

جدول محوری که داده های به روز شده را نشان می دهد

مجوز رایگان دریافت کنید

برای امتحان کردن API بدون محدودیت ارزیابی، می‌توانید [یک مجوز موقت رایگان] درخواست کنید.

نتیجه

در این مقاله نحوه کار با جداول محوری در فایل های اکسل با استفاده از C++ را یاد گرفتید. به طور خاص، شما یاد گرفته اید که چگونه یک جدول محوری ایجاد کنید و داده ها را در یک جدول محوری مرتب کنید، مخفی کنید و با استفاده از C++ به روز کنید. Aspose.Cells برای C++ یک API گسترده است که مجموعه ای از ویژگی های اضافی را برای کار با فایل های اکسل فراهم می کند. می‌توانید با مراجعه به مستندات رسمی API را با جزئیات بررسی کنید. در صورت وجود هرگونه سوال، لطفاً در [تالار گفتمان پشتیبانی رایگان32 ما با ما تماس بگیرید.

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