有没有一种方法来读取嵌入式Excel文件在Java中,如下图所示
的数据目前,我使用下面的代码来读取Excel文件
File xlsxFile = new File("test.xlsx"); inputStream = new FileInputStream(xlsxFile);XSSFWorkbook workbook = new XSSFWorkbook(inputStream);XSSFSheet sheet = workbook.getSheetAt(4);
File xlsxFile = new File("test.xlsx");
inputStream = new FileInputStream(xlsxFile);
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
XSSFSheet sheet = workbook.getSheetAt(4);
字符串
r55awzrz1#
您的嵌入对象在第5张图纸的图纸图形中的形状中可见。若要获取对象数据,可以覆盖该绘图的所有形状。如果形状是XSSFObjectData的示例,则它是对象数据形状。如果内容类型是“application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”,则对象数据形状链接到包含Office Open XML格式的Excel电子表格数据的包部件(XSSF)。如果是,那么您可以从该包部分的输入流中获得XSSFWorkbook。示例代码:
XSSFObjectData
XSSF
XSSFWorkbook
import org.apache.poi.ss.usermodel.*;import org.apache.poi.xssf.usermodel.*;import java.io.FileInputStream;class ExcelGetEmbeddedFromShape { public static void main(String[] args) throws Exception { String filename = "./ExcelWithEmbedded.xlsx"; Workbook workbook = WorkbookFactory.create(new FileInputStream(filename)); Sheet sheet = workbook.getSheetAt(4); Drawing drawing = sheet.getDrawingPatriarch(); if (drawing instanceof XSSFDrawing) { for (XSSFShape shape : ((XSSFDrawing)drawing).getShapes()) { if (shape instanceof XSSFObjectData) { XSSFObjectData objectData = (XSSFObjectData)shape; if ("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet".equals(objectData.getContentType())) { XSSFWorkbook embeddedWorkbook = (XSSFWorkbook)WorkbookFactory.create(objectData.getObjectPart().getInputStream()); System.out.println(embeddedWorkbook); //... do something with embeddedWorkbook ... } } } } workbook.close(); }}
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import java.io.FileInputStream;
class ExcelGetEmbeddedFromShape {
public static void main(String[] args) throws Exception {
String filename = "./ExcelWithEmbedded.xlsx";
Workbook workbook = WorkbookFactory.create(new FileInputStream(filename));
Sheet sheet = workbook.getSheetAt(4);
Drawing drawing = sheet.getDrawingPatriarch();
if (drawing instanceof XSSFDrawing) {
for (XSSFShape shape : ((XSSFDrawing)drawing).getShapes()) {
if (shape instanceof XSSFObjectData) {
XSSFObjectData objectData = (XSSFObjectData)shape;
if ("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet".equals(objectData.getContentType())) {
XSSFWorkbook embeddedWorkbook = (XSSFWorkbook)WorkbookFactory.create(objectData.getObjectPart().getInputStream());
System.out.println(embeddedWorkbook);
//... do something with embeddedWorkbook ...
}
workbook.close();
1条答案
按热度按时间r55awzrz1#
您的嵌入对象在第5张图纸的图纸图形中的形状中可见。
若要获取对象数据,可以覆盖该绘图的所有形状。如果形状是
XSSFObjectData
的示例,则它是对象数据形状。如果内容类型是“application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”,则对象数据形状链接到包含Office Open XML格式的Excel电子表格数据的包部件(XSSF
)。如果是,那么您可以从该包部分的输入流中获得XSSFWorkbook
。示例代码:
字符串