使用 C++ 加载工作簿或工作表时过滤对象
可能的使用场景
请在过滤工作簿中的数据时使用 LoadOptions.GetLoadFilter() 属性。如果要从单个工作表过滤数据,则必须重写 LoadFilter.StartSheet 方法。在创建或使用 LoadFilter 时,请提供来自 LoadDataFilterOptions 枚举的适当值。
LoadDataFilterOptions 枚举具有以下可能的值。
- 所有
- 文档设置
- 单元格空白
- 单元格布尔
- 单元格数据
- 单元格错误
- 单元格数值
- 单元格字符串
- 单元格值
- Chart
- 条件格式
- 数据验证
- 定义名称
- 文档属性
- 公式
- 超链接
- 合并区域
- 数据透视表
- 设置
- 形状
- 表单数据
- 表格设置
- 结构
- 样式
- 表
- VBA
- Xml映射
加载工作簿时过滤对象
以下示例代码说明了如何从工作簿中筛选图表。请查看此代码中使用的示例excel文件和由此生成的输出PDF。从输出PDF中可以看出,所有图表都已从工作簿中筛选出。
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Filter charts from the workbook
LoadOptions lOptions;
lOptions.SetLoadFilter(new LoadFilter(LoadDataFilterOptions::All & ~LoadDataFilterOptions::Chart));
// Load the workbook with the above filter
U16String inputFilePath = srcDir + u"sampleFilterCharts.xlsx";
Workbook workbook(inputFilePath, lOptions);
// Save worksheet to a single PDF page
PdfSaveOptions pOptions;
pOptions.SetOnePagePerSheet(true);
// Save the workbook in PDF format
U16String outputFilePath = outDir + u"sampleFilterCharts.pdf";
workbook.Save(outputFilePath, pOptions);
std::cout << "Workbook saved successfully with filtered charts!" << std::endl;
Aspose::Cells::Cleanup();
}
加载工作表时过滤对象
以下示例代码加载了源excel文件,并使用自定义过滤器从其工作表中筛选以下数据。
- 它会从名为NoCharts的工作表中筛选图表。
- 它会从名为NoShapes的工作表中筛选形状。
- 它会从名为NoConditionalFormatting的工作表中筛选条件格式。
一旦使用自定义过滤器加载了源excel文件,它会逐个工作表地获取所有工作表的图像。以下是用于参考的输出图像。可以看出,第一张图像没有图表,第二张图像没有形状,第三张图像没有条件格式。
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
class CustomLoadFilter : public LoadFilter
{
public:
void StartSheet(Worksheet& sheet) override
{
U16String sheetName = sheet.GetName();
if (sheetName == u"NoCharts")
{
// Load everything and filter charts
SetLoadDataFilterOptions(static_cast<LoadDataFilterOptions>(static_cast<int>(LoadDataFilterOptions::All) & ~static_cast<int>(LoadDataFilterOptions::Chart)));
}
if (sheetName == u"NoShapes")
{
// Load everything and filter shapes
SetLoadDataFilterOptions(static_cast<LoadDataFilterOptions>(static_cast<int>(LoadDataFilterOptions::All) & ~static_cast<int>(LoadDataFilterOptions::Drawing)));
}
if (sheetName == u"NoConditionalFormatting")
{
// Load everything and filter conditional formatting
SetLoadDataFilterOptions(static_cast<LoadDataFilterOptions>(static_cast<int>(LoadDataFilterOptions::All) & ~static_cast<int>(LoadDataFilterOptions::ConditionalFormatting)));
}
}
};
// Add main function to serve as entry point
int main() {
Aspose::Cells::Startup();
Aspose::Cells::Cleanup();
return 0;
}
这是如何根据工作表名称使用CustomLoadFilter类。
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
class CustomLoadFilter : public LoadFilter
{
public:
CustomLoadFilter() : LoadFilter(LoadDataFilterOptions::All) {}
};
int main()
{
Aspose::Cells::Startup();
// Source directory
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Filter worksheets using CustomLoadFilter class
LoadOptions loadOpts;
CustomLoadFilter customLoadFilter;
loadOpts.SetLoadFilter(&customLoadFilter);
// Load the workbook with filter defined in CustomLoadFilter class
Workbook workbook(srcDir + u"sampleCustomFilteringPerWorksheet.xlsx", loadOpts);
// Take the image of all worksheets one by one
WorksheetCollection sheets = workbook.GetWorksheets();
for (int i = 0; i < sheets.GetCount(); i++)
{
// Access worksheet at index i
Worksheet worksheet = sheets.Get(i);
// Create an instance of ImageOrPrintOptions
// Render entire worksheet to image
ImageOrPrintOptions imageOpts;
imageOpts.SetOnePagePerSheet(true);
imageOpts.SetImageType(Aspose::Cells::Drawing::ImageType::Png);
// Convert worksheet to image
SheetRender render(worksheet, imageOpts);
render.ToImage(0, outDir + u"outputCustomFilteringPerWorksheet_" + worksheet.GetName() + u".png");
}
Aspose::Cells::Cleanup();
return 0;
}