[]
        
(Showing Draft Content)

转换为图像

GcExcel允许您将工作表、任何指定范围和各种形状类型转换为图像。因此,可以方便地直接在其他文档(如Word、PDF或PPT文档)中使用转换后的图像。支持的转换图像格式有PNG、JPG/JPEG、SVG和GIF。

GcExcel 还提供了 ImageSaveOptions 类中的各种方法,可在通过其相应的接口使用 toImage 方法将工作表、区域或形状导出为图像文件时修改和调整图像。

以下是 ImageSaveOptions 类的方法及其可用的范围:

属性

工作表

区域

形状

描述

ScaleX 和 ScaleY

获取或设置导出图像文件的缩放比例。

Resolution

获取或设置导出图像文件中JPEG文件的每英寸点数(DPI)。

BackgroundColor

获取或设置导出图像文件的背景颜色。

ShowRowHeadings

获取或设置在导出图像文件中是否显示行标题。

ShowColumnHeadings

获取或设置在导出图像文件中是否显示列标题。

ShowGridlines

获取或设置在导出图像文件中是否显示网格线。

GridlineColor

获取或设置导出图像文件中网格线的颜色。

ShowDrawingObjects

获取或设置在导出图像文件中是否显示绘图对象(图表、形状或图片)。

BlackAndWhite

获取或设置是否导出黑白图像。

IncludeAutoMergedCells

指示是否包含自动合并的单元格。默认值为 false。

注意: 要转换具有透明度的图像,应使用类似PNG的图像格式,因为JPG/JPEG格式不支持图像透明度。

将工作表转换为图像

可以使用IWorksheet接口的toImage方法将工作表转换为图像。转换后的图像显示工作表的矩形区域,该矩形区域括在单元格A1和存在任何数据或形状的最后一个单元格下。例如,如果工作表包含范围为D5:F9的形状或数据,则转换后的图像将显示范围为A1:F9的区域。

无法将空白工作表转换为图像。

请参考以下示例代码将工作表转换为图像并设置 ImageSaveOptions 选项进行设置。在下面的示例代码中,ImageSaveOptions 修改了比例、行和列标题的显示属性、绘图对象和网格线,并更改了背景和网格线颜色。

// Create a new workbook
        Workbook workbook = new Workbook();
        IWorksheet worksheet = workbook.getWorksheets().get(0);
        
        // Add data
        worksheet.getRange("A1").setValue("Sales Report");
        worksheet.getRange("A1").getFont().setColor(Color.FromArgb(56, 93, 171));
        worksheet.getRange("A1").getFont().setSize(24);
        worksheet.getRange("A1").getFont().setBold(true);
        worksheet.getRange("A3:E7")
                .setValue(new Object[][] { { "Date", "Product", "Customer", "Amount", "Show" },
                        { "1/1/2021", "Bose 785593-0050", "Fabrikam, Inc.", "$1,886.00", "1" },
                        { "1/3/2021", "Canon EOS 1500D", "Alpine Ski House", "$4,022.00", "" },
                        { "1/4/2021", "Haier 394L 4Star", "Coho Winery", "$8,144.00", "" },
                        { "1/7/2021", "IFB 6.5 Kg FullyAuto", "Southridge Video", "$8,002.00", "1" } });
        // Instantiate ImageSaveOptions and configure the properties
        ImageSaveOptions options = new ImageSaveOptions();
        options.setScaleX(3.0);
        options.setScaleY(2.0);
        options.setShowRowHeadings(true);
        options.setShowColumnHeadings(false);
        options.setShowDrawingObjects(true);
        options.setBackgroundColor(Color.FromArgb(226, 231, 243));
        options.setShowGridlines(true);
        options.setGridlineColor(Color.FromArgb(145, 167, 214));
        
        // Save worksheet to image without ImageSaveOptions
        worksheet.toImage("WorksheetToImage.png");
        
        // Save worksheet to image using ImageSaveOptions
        worksheet.toImage("WorksheetToImage_UsingImageSaveOptions.png", options);

请参考以下示例代码,从现有文件中将工作表转换为图像。

// Create a new workbook
var workbook = new Workbook();
// Open a xlsx file
workbook.open("Workbook.xlsx");
IWorksheet worksheet = workbook.getWorksheets().get(0);

// Instantiate ImageSaveOptions and configure the properties
ImageSaveOptions options = new ImageSaveOptions();
options.setScaleX(3.0);
options.setScaleY(2.0);
options.setShowRowHeadings(true);
options.setShowColumnHeadings(false);
options.setShowDrawingObjects(true);
options.setBackgroundColor(Color.FromArgb(226, 231, 243));
options.setShowGridlines(true);
options.setGridlineColor(Color.FromArgb(145, 167, 214));

// Create a png file stream
OutputStream out;
try {
    // Create a png file stream
    out = new FileOutputStream("ConvertWorksheetToImage.png");
    // Export the worksheet to image without ImageSaveOptions
    worksheet.toImage(out, ImageType.PNG);
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

OutputStream outputStreamoptions;
try {
    // Create another png file stream
    outputStreamoptions = new FileOutputStream("ConvertWorksheetToImage_UsingImageSaveOptions.png");
    // Export the worksheet to image using ImageSaveOptions
    worksheet.toImage(outputStreamoptions, ImageType.PNG, options);
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

将区域转换为图像

可以使用 IRange 接口的 toImage 方法将工作表中的特定区域转换为图像。生成的图像显示指定范围内包含的工作表矩形区域。

请参考以下示例代码,从现有文件中将指定的范围转换为图像。在下面的示例代码中,ImageSaveOptions 修改了比例、行和列标题的显示属性、绘图对象、网格线以及更改了背景和网格线颜色。

// Create a new workbook
Workbook workbook = new Workbook();
IWorksheet worksheet = workbook.getWorksheets().get(0);

// Add data
worksheet.getRange("D10:F10").setValue(new String[] { "Device", "Quantity", "Unit Price" });
worksheet.getRange("D11:F14").setValue(new Object[][] { { "T540p", 12, 9850 }, { "T570", 5, 7460 },
        { "Y460", 6, 5400 }, { "Y460F", 8, 6240 } });

IRange range = worksheet.getRange("D10:F14");
    
// Instantiate ImageSaveOptions and configure the properties
ImageSaveOptions options = new ImageSaveOptions();
options.setScaleX(3.0);
options.setScaleY(2.0);
options.setShowRowHeadings(true);
options.setShowColumnHeadings(false);
options.setShowDrawingObjects(true);
options.setBackgroundColor(Color.FromArgb(226, 231, 243));
options.setShowGridlines(true);
options.setGridlineColor(Color.FromArgb(145, 167, 214));

// Save range to image without ImageSaveOptions
range.toImage("RangeToImage.png");

// Save range to image using ImageSaveOptions
range.toImage("RangeToImage_UsingImageSaveOptions.png", options);

请参考以下示例代码,从现有文件中将指定的范围转换为图像。

// Create a new workbook
var workbook = new Workbook();

InputStream openFile;
try {
    openFile = new FileInputStream("RangeWorkbook.xlsx");
    // Open a xlsx file contains data in a range
    workbook.open(openFile, OpenFileFormat.Xlsx);
} catch (FileNotFoundException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

IWorksheet worksheet = workbook.getWorksheets().get(0);

// Instantiate ImageSaveOptions and configure the properties
ImageSaveOptions options = new ImageSaveOptions();
options.setScaleX(3.0);
options.setScaleY(2.0);
options.setShowRowHeadings(true);
options.setShowColumnHeadings(false);
options.setShowDrawingObjects(true);
options.setBackgroundColor(Color.FromArgb(226, 231, 243));
options.setShowGridlines(true);
options.setGridlineColor(Color.FromArgb(145, 167, 214));

OutputStream out;
try {
    // Create a png file stream
    out = new FileOutputStream("ConvertRangeToImage.png");
    // Export the range to image without ImageSaveOptions
    worksheet.getRange("A1:C5").toImage(out, ImageType.PNG);
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

OutputStream outputStreamoptions;
try {
    // Create another png file stream
    outputStreamoptions = new FileOutputStream("ConvertRangeToImage_UsingImageSaveOptions.png");
    // Export the range to image using ImageSaveOptions
    worksheet.getRange("A1:C5").toImage(outputStreamoptions, ImageType.PNG, options);
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

将形状转换为图像

GcExcel允许您使用 IShape接口的toImage 方法将各种形状类型转换为图像。形状类型包括图片、切片器、图表和自选图形等形状。生成的图像显示形状所包含的工作表矩形区域。

请参考以下示例代码,从现有文件中将自选图形转换为图像。下面的示例代码中使用 ImageSaveOptions 修改了比例并更改了背景颜色。

// Create a new workbook
Workbook workbook = new Workbook();
IWorksheet worksheet = workbook.getWorksheets().get(0);

// Add an oval
IShape shape = worksheet.getShapes().addShape(AutoShapeType.Oval, 20, 20, 200, 100);
       
// Instantiate ImageSaveOptions and configure the properties
ImageSaveOptions options = new ImageSaveOptions();
options.setScaleX(3.0);
options.setScaleY(2.0);
options.setBackgroundColor(Color.GetLimeGreen());

// Save shape to image without ImageSaveOptions
shape.toImage("ShapeToImage.png");

// Save shape to image using ImageSaveOptions
shape.toImage("ShapeToImage_UsingImageSaveOptions.png", options);

请参考以下示例代码,从现有文件中将自选图形转换为图像。

// Create a new workbook
Workbook workbook = new Workbook();

// Open a xlsx file contains a group shape
workbook.open("ShapeWorkbook.xlsx");
IWorksheet worksheet = workbook.getWorksheets().get(0);

// Instantiate ImageSaveOptions and configure the properties
ImageSaveOptions options = new ImageSaveOptions();
options.setScaleX(3.0);
options.setScaleY(2.0);
options.setBackgroundColor(Color.GetLime());

OutputStream out;
try {
    // Create a png file stream
    out = new FileOutputStream("ConvertShapeToImage.png");
    // Export the shape to image without ImageSaveOptions
    worksheet.getShapes().get(0).toImage(out, ImageType.PNG);
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

OutputStream outputStreamoptions;
try {
    // Create another png file stream
    outputStreamoptions = new FileOutputStream("ConvertShapeToImage.png");
    // Export the shape to image using ImageSaveOptions
    worksheet.getShapes().get(0).toImage(outputStreamoptions, ImageType.PNG, options);
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

请参考以下示例代码将图表转换为图像。

// create a new workbook
 Workbook workbook = new Workbook();
 IWorksheet worksheet = workbook.getWorksheets().get(0);

 // Prepare data for chart
 worksheet.getRange("A1:D4")
         .setValue(new Object[][] { { null, "Q1", "Q2", "Q3" }, { "Mobile Phones", 1330, 2345, 3493 },
                 { "Laptops", 2032, 3632, 2197 }, { "Tablets", 6233, 3270, 2030 } });

 worksheet.getRange("A:D").getColumns().autoFit();

 // Add Area Chart
 IShape shape = worksheet.getShapes().addChart(ChartType.Area, 250, 20, 360, 230);

 // Add series to SeriesCollection
 shape.getChart().getSeriesCollection().add(worksheet.getRange("A1:D4"), RowCol.Columns, true, true);

 // Configure Chart Title
 shape.getChart().getChartTitle().getTextFrame().getTextRange().getParagraphs().add("Annual Sales Record");

 // Save chart to image
 shape.toImage("ConvertChartToImage.png");

请参考以下示例代码,将图表从现有文件转换为图像。

// create a png file stream
  FileOutputStream outputStream = new
  FileOutputStream("ConvertChartToImage.png");
  
  // create a new workbook 
  Workbook workbook = new Workbook();
  
  FileInputStream fileStream = new FileInputStream("scatterchart.xlsx");
  
  // Open a xlsx file contains a chart 
  workbook.open(fileStream); 
  IWorksheet worksheet = workbook.getWorksheets().get(0);
  
  // Export the chart to image
  worksheet.getShapes().get(0).toImage(outputStream, ImageType.PNG);

限制

toImage 方法不支持以EMF或WMF图像格式导出图像。

与PDF文件相比,带有图案填充的SVG格式文件可能无法正确呈现,因为SVG格式本身并不完全支持图案填充。