Excel XML到Java对象

Excel XML到Java对象,java,xml,apache-poi,Java,Xml,Apache Poi,我有一点需要用Excel打开xml文件的情况。客户端正在向我发送这种类型的xml: <?xml version="1.0"?> <?mso-application progid="Excel.Sheet"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-

我有一点需要用Excel打开xml文件的情况。客户端正在向我发送这种类型的xml:

<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
 <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
  <LastAuthor>Microsoft Office User</LastAuthor>
  <Created>1996-10-14T23:33:28Z</Created>
  <LastSaved>2021-03-10T13:02:44Z</LastSaved>
  <Version>16.00</Version>
 </DocumentProperties>
 <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
  <AllowPNG/>
 </OfficeDocumentSettings>
 <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
  <WindowHeight>15940</WindowHeight>
  <WindowWidth>28040</WindowWidth>
  <WindowTopX>380</WindowTopX>
  <WindowTopY>500</WindowTopY>
  <ProtectStructure>False</ProtectStructure>
  <ProtectWindows>False</ProtectWindows>
 </ExcelWorkbook>
 <Styles>
  <Style ss:ID="Default" ss:Name="Normal">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="12" ss:Color="#000000"/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
  <Style ss:ID="s62">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font ss:FontName="Arial"/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
  <Style ss:ID="s63">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font ss:FontName="Trebuchet MS" ss:Color="#000000" ss:Bold="1"/>
   <Interior ss:Color="#D3D3D3" ss:Pattern="Solid"/>
   <NumberFormat/>
   <Protection/>
  </Style>
  <Style ss:ID="s64">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font ss:FontName="Trebuchet MS" ss:Color="#000000"/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
  <Style ss:ID="s65">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font ss:FontName="Trebuchet MS" ss:Color="#993300" ss:Bold="1"/>
   <Interior ss:Color="#FFFF00" ss:Pattern="Solid"/>
   <NumberFormat/>
   <Protection/>
  </Style>
 </Styles>
 <Worksheet ss:Name="SITES_INFO">
  <Table ss:ExpandedColumnCount="36" ss:ExpandedRowCount="2" x:FullColumns="1"
   x:FullRows="1" ss:StyleID="s62" ss:DefaultColumnWidth="65"
   ss:DefaultRowHeight="13">
   <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="75" ss:Span="4"/>
   <Column ss:Index="6" ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="175"/>
   <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="90"/>
   <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="225"/>
   <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="200"/>
   <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="225"/>
   <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="100" ss:Span="1"/>
   <Column ss:Index="13" ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="125"/>
   <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="100"/>
   <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="175"/>
   <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="125" ss:Span="2"/>
   <Column ss:Index="19" ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="175"/>
   <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="160"/>
   <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="150"/>
   <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="160" ss:Span="1"/>
   <Column ss:Index="24" ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="250"/>
   <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="200" ss:Span="1"/>
   <Column ss:Index="27" ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="160"
    ss:Span="1"/>
   <Column ss:Index="29" ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="175"/>
   <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="160"/>
   <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="215"/>
   <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="175"/>
   <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="160" ss:Span="1"/>
   <Column ss:Index="35" ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="200"/>
   <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="100"/>
   <Row ss:AutoFitHeight="0" ss:Height="20">
    <Cell ss:StyleID="s63"><Data ss:Type="String">Protocol</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Site Number</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">PI Salutation</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">PI Last Name</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">PI First Name</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">PI Email</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">PI Phone Number</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Drug Shipment Name</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Drug Shipment Address 1</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Drug Shipment Address 2</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Drug Shipment City</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Drug Shipment State</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Drug Shipment Province</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Drug Shipment Zip</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Drug Shipment Country ISO Code</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Drug Shipment Country</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Drug Shipment Phone</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Drug Shipment FAX</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Drug Shipment Contact First Name</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Drug Shipment Contact Last Name</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Drug Shipment Contact Email</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Drug Shipment Contact Phone</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Drug Shipment Contact Role</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Patient Treatment Center Name</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Patient Treatment Center Address 1</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Patient Treatment Center Address 2</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Patient Treatment Center City</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Patient Treatment Center State</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Patient Treatment Center Province</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Patient Treatment Center Zip</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Patient Treatment Center Country ISO Code</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Patient Treatment Center Country</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Patient Treatment Center Phone</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Patient Treatment Center Fax</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Patient Treatment Center TimeZone</Data></Cell>
    <Cell ss:StyleID="s63"><Data ss:Type="String">Transaction Flag</Data></Cell>
   </Row>
   <Row>
    <Cell ss:StyleID="s64"><Data ss:Type="String">fgregre</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">0382</Data></Cell>
    <Cell ss:StyleID="s64"/>
    <Cell ss:StyleID="s64"><Data ss:Type="String">gregreger</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">gergre</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">vregregerge</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">ergreger</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">regreger</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">8 Haaliya st</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">vervregerge</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">Haifa</Data></Cell>
    <Cell ss:StyleID="s64"/>
    <Cell ss:StyleID="s64"><Data ss:Type="String">N/A</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">gergere</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">ISR</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">ISRAEL</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">gergereg</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">gergreger</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">regerger</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">regerge</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">rgergerg</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">ergerge</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">ergerge</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">Rambam Medical Center</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">regergerge</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">Hematology Department</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">ergergre</Data></Cell>
    <Cell ss:StyleID="s64"/>
    <Cell ss:StyleID="s65"><Data ss:Type="String">N/A</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">ergreegre</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">ISR</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">ergerger</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">regergreger</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">regregerge</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">(GMT+02:00) Jerusalem</Data></Cell>
    <Cell ss:StyleID="s65"><Data ss:Type="String">UPDATE</Data></Cell>
   </Row>
  </Table>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <Selected/>
   <LeftColumnVisible>28</LeftColumnVisible>
   <Panes>
    <Pane>
     <Number>3</Number>
     <ActiveRow>5</ActiveRow>
     <ActiveCol>34</ActiveCol>
    </Pane>
   </Panes>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
 <Worksheet ss:Name="USER_INFO">
  <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
   x:FullRows="1" ss:StyleID="s62" ss:DefaultColumnWidth="65"
   ss:DefaultRowHeight="13">
  </Table>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <Panes>
    <Pane>
     <Number>3</Number>
     <ActiveRow>22</ActiveRow>
     <ActiveCol>7</ActiveCol>
    </Pane>
   </Panes>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
</Workbook>

Microsoft Office用户
1996-10-14T23:33:28Z
2021-03-10T13:02:44Z
16
15940
28040
380
500
假的
假的
协议
站点号
圆周率称呼
PI姓氏
PI名字
PI电子邮件
PI电话号码
药品装运名称
药品装运地址1
药品装运地址2
毒品运输城市
药物装运国
毒品运输省
药品装运拉链
药品装运国ISO代码
毒品运输国
运毒电话
药品装运传真
药品装运联系人姓名
药品装运联系人姓氏
药品装运联系电子邮件
药品装运联系电话
药品装运联系人角色
病人治疗中心名称
病人治疗中心地址1
病人治疗中心地址2
病人治疗中心城市
州病人治疗中心
广东省病人治疗中心
病人治疗中心
患者治疗中心国家ISO代码
国家患者治疗中心
病人治疗中心电话
病人治疗中心传真
病人治疗中心时区
事务标志
fgregre
0382
格雷格
格格瑞
弗雷格里奇
麦格雷格
换料机
哈利耶街8号
维夫雷格
海法
不适用
格基尔
ISR
以色列
gergereg
格格雷格
雷格格
雷格
埃尔热尔格
麦尔热
麦尔热
兰巴姆医疗中心
雷格尔格
血液科
厄尔盖尔
不适用
ergreegre
ISR
麦尔格
雷格雷格
重新聚集
(格林尼治时间+02:00)耶路撒冷
更新
28
3.
5.
34
假的
假的
3.
22
7.
假的
假的
我通过sftp接收此文件,并将其作为字符串读取,获取其内容。我尝试使用ApachePOI,认为我能够将其作为xls文件读取并将其映射到类

下面是我如何阅读它的:

   private void processFileData(String stringData, String filename, String extension)
    {
        InputStream inp = IOUtils.toInputStream(stringData, StandardCharsets.UTF_8);
        List<MULSite> siteList = new ArrayList<MULSite>();

        try {
            inp = FileMagic.prepareToCheckMagic(inp);
            Workbook workbook = WorkbookFactory.create(inp);
            Iterator<Row> iterator = workbook.getSheet("SITES_INFO").iterator();
            while (iterator.hasNext())
            {
                MULSite site = new MULSite();
                site.parse(iterator.next(),"xls", filename);
                DtoValidatorResult isValid = site.validate();
                if(isValid.getValid())
                {
                    splittableDtoMap.put(site.getSiteNumber(), site.toString());
                }
                else {
                    throw new RetrieverException("Issue encountered at " + filename);
                }
            }
        } catch (IOException | RetrieverException | JAXBException e) {
            e.printStackTrace();
        }
    }
private void processFileData(字符串stringData、字符串文件名、字符串扩展名)
{
InputStream inp=IOUtils.toInputStream(stringData,StandardCharsets.UTF_8);
List siteList=new ArrayList();
试一试{
inp=FileMagic.prepareToCheckMagic(inp);
工作簿=WorkbookFactory.create(inp);
迭代器迭代器=工作簿.getSheet(“站点信息”).Iterator();
while(iterator.hasNext())
{
乳化物位置=新乳化物();
parse(iterator.next(),“xls”,文件名);
DtoValidatorResult isValid=site.validate();
if(isValid.getValid())
{
splittableDtoMap.put(site.getSiteNumber(),site.toString());
}
否则{
抛出新的RetrieverException(“在“+文件名”处遇到问题);
}
}
}catch(IOException | RetrieverException | jaxbeexception e){
e、 printStackTrace();
}
}
但是,当它到达以下位置时:
Workbook工作簿=WorkbookFactory.create(inp)
它抛出以下错误:
java.lang.IllegalArgumentException:您的InputStream既不是OLE2流,也不是OOXML流


我有点纠结于如何处理这种类型的文件,我尝试将扩展名从.xml改为.xls,Excel可以完美地以两种方式打开它,但Apache POI不接受它,我不确定问题是否出在文件上,或者我如何使用InputStream读取它。

遗憾的是,这是不可能的,Apache POI不支持Office xml,它从未在库中实现过,因为微软很快就不赞成它


我已经放弃了使用ApachePOI来实现这一点,并将使用XML解析器将其解析为DOM。

遗憾的是,这是不可能的,ApachePOI不支持Office XML,它从未在库中实现过,因为Microsoft很快就不赞成使用它


我已经放弃了使用Apache POI来实现这一点,并将使用XML解析器将其解析为DOM。

不确定,但我认为回答您的问题不确定,但我认为回答您的问题可能是一个很好的基础。我将尝试一下,看看它如何与Apache Tika一起工作,现在我继续使用DOM Xml解析,因为这是制作工作原型的最快方法。这可能是一个很好的基础,我将尝试一下,看看它如何与ApacheTika一起工作,现在我继续使用DOM Xml解析,因为这是制作工作原型的最快方法。