جداول محوری دادهها را دوباره مرتب میکنند تا آنها را به شیوهای معنیدار نشان دهند. آنها گزینه های مختلف مرتب سازی را ارائه می دهند و با گروه بندی داده ها با یکدیگر، مبالغ، میانگین ها یا سایر آمارها را ارائه می دهند. این یک ابزار ضروری برای تجزیه و تحلیل داده ها است و بخش اساسی MS Excel است. ممکن است خود را در سناریوهایی بیابید که باید جداول محوری را به صورت برنامه ریزی شده ایجاد و دستکاری کنید. برای این منظور، این مقاله نحوه کار با جداول محوری در فایل های اکسل را با استفاده از C++ به شما آموزش می دهد.
- C++ API برای کار با Pivot Tables در فایل های Excel
- یک Pivot Table در یک فایل اکسل با استفاده از C++ ایجاد کنید
- مرتب سازی Pivot Table در یک فایل اکسل با استفاده از C++
- با استفاده از C++ سطرها را در یک Pivot Table مخفی کنید
- داده های Pivot Table را با استفاده از 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++ ایجاد کنید
در مثال زیر، یک فایل اکسل جدید ایجاد می کنیم، داده های نمونه را در آن قرار می دهیم و یک جدول محوری ایجاد می کنیم. فایل تولید شده در این مثال به عنوان فایل منبع برای نمونه های دیگر استفاده خواهد شد. مراحل زیر برای ایجاد جدول محوری در فایل اکسل آورده شده است.
- ابتدا یک نمونه از کلاس IWorkbook برای نمایش فایل اکسل جدید ایجاد کنید.
- با استفاده از روش IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index) به کاربرگ جایی که میخواهید جدول محوری را وارد کنید، دسترسی پیدا کنید.
- داده های نمونه را برای جدول محوری اضافه کنید.
- جدول محوری را با استفاده از IWorksheet->GetIPivotTables()->Add(intrusiveptr) اضافه کنیدAspose::Cells::Systems::String sourceData, intrusiveptrAspose::Cells::Systems::String destCellName، intrusiveptrAspose::Cells::Systems::String tableName) روش.
- برای دسترسی به جدول محوری، از روش IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index) استفاده کنید.
- فیلدها را دستکاری کنید و سبک جدول محوری را تنظیم کنید.
- در نهایت، فایل اکسل را با استفاده از IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String filename) روش.
کد نمونه زیر نحوه ایجاد جدول محوری در فایل اکسل با استفاده از 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 در یک فایل اکسل با استفاده از C++
در مثال زیر، ستون اول جدول محوری را به ترتیب نزولی مرتب می کنیم. در زیر مراحل مرتب سازی داده ها در جدول محوری آورده شده است.
- ابتدا فایل نمونه اکسل را با استفاده از کلاس IWorkbook بارگذاری کنید.
- کاربرگ حاوی جدول محوری را با استفاده از روش IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index) بازیابی کنید.
- با استفاده از روش IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index) به جدول محوری دسترسی پیدا کنید.
- فیلد ردیف را دریافت کنید و جدول محوری را با استفاده از روشهای IPivotField->SetAutoSort(مقدار bool) و IPivotField->SetAscendSort(مقدار bool) مرتب کنید.
- محتویات جدول محوری را بازخوانی کنید و داده ها را به ترتیب با استفاده از روش های IPivotTable->RefreshData() و IPivotTable->CalculateData() محاسبه کنید.
- در نهایت، فایل اکسل را با استفاده از IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String filename) روش.
کد نمونه زیر نحوه مرتبسازی جدول محوری در فایل اکسل را با استفاده از 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، میتوانید ردیفها را در جدول محوری نیز پنهان کنید. در مثال زیر، سطر را با برچسب ردیف “نارنجی” مخفی می کنیم. مراحل زیر برای پنهان کردن ردیف ها در جدول محوری آمده است.
- ابتدا فایل نمونه اکسل را با استفاده از کلاس IWorkbook بارگذاری کنید.
- کاربرگ حاوی جدول محوری را با استفاده از روش IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index) بازیابی کنید.
- با استفاده از روش IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index) به جدول محوری دسترسی پیدا کنید.
- محدوده بدنه داده جدول محوری را با استفاده از روش IPivotTable->GetIDataBodyRange() دریافت کنید.
- در ردیف های جدول محوری تکرار کنید و ردیف هایی را که با معیارهای شما مطابقت دارند پنهان کنید.
- محتویات جدول محوری را بازخوانی کنید و داده ها را به ترتیب با استفاده از روش های IPivotTable->RefreshData() و IPivotTable->CalculateData() محاسبه کنید.
- در نهایت، فایل اکسل را با استفاده از IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String filename) روش.
کد نمونه زیر نشان می دهد که چگونه ردیف ها را در یک جدول محوری با استفاده از 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” جایگزین می کنیم و تغییر را در جدول محوری منعکس می کنیم. مراحل زیر برای دستکاری داده های جدول محوری آورده شده است.
- ابتدا فایل نمونه اکسل را با استفاده از کلاس IWorkbook بارگذاری کنید.
- کاربرگ حاوی داده های جدول محوری را با استفاده از روش IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index) بازیابی کنید.
- داده های جدول محوری را با توجه به نیاز خود به روز کنید.
- برای دسترسی به جدول محوری، از روش IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index) استفاده کنید.
- محتویات جدول محوری را بازخوانی کنید و داده ها را به ترتیب با استفاده از روش های IPivotTable->RefreshData() و IPivotTable->CalculateData() محاسبه کنید.
- در نهایت، فایل اکسل را با استفاده از IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String روش filename).
کد نمونه زیر نحوه به روز رسانی داده های جدول محوری را با استفاده از 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 ما با ما تماس بگیرید.