如何在MarkLogic中创build多页面excel

我想在单个工作簿中创build两张工作表的Excel文件。 当我尝试使用下面的代码时,它会创build一个无法打开的工作簿。 但是,当我创build一个单一的工作表。 请为这两种情况find附件代码,并让我知道我错过了什么。

创build单张excel(工作)。

declare namespace ms = "http://schemas.openxmlformats.org/spreadsheetml/2006/main" ; declare namespace ns2 = "http://www.example.com/"; declare function local:AgentReport() { <AgentReport> <Report> <GroupNumber>1</GroupNumber> <Quotes>1</Quotes> <Converted>1</Converted> <Conv_Rate>1</Conv_Rate> </Report> <Report> <GroupNumber>2</GroupNumber> <Quotes>2</Quotes> <Converted>2</Converted> <Conv_Rate>2</Conv_Rate> </Report> </AgentReport> }; declare function local:getRows( $x ) as element(ms:row)* { let $first-row := <ms:row> { for $i in $x/*/*[1]/child::element() return <ms:ct="inlineStr"> <ms:is> <ms:t>{fn:node-name($i)}</ms:t> </ms:is> </ms:c> } </ms:row> return ( $first-row, for $each in $x//Report return <ms:row> { for $i in $each/* return <ms:ct="inlineStr"> <ms:is> <ms:t>{$i/string()}</ms:t> </ms:is> </ms:c> } </ms:row> ) }; declare function local:generate-simple-xl-ooxml( $content-types as node(), $workbook as node(), $rels as node(), $workbookrels as node(), $sheet1 as node() ) as binary() { let $manifest := <parts xmlns="xdmp:zip"> <part>[Content_Types].xml</part> <part>workbook.xml</part> <part>_rels/.rels</part> <part>_rels/workbook.xml.rels</part> <part>sheet1.xml</part> </parts> let $parts := ($content-types, $workbook, $rels, $workbookrels, $sheet1) return xdmp:zip-create($manifest, $parts) }; let $content-types := <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"> <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/> <Default Extension="xml" ContentType="application/xml"/> <Override PartName="/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/> <Override PartName="/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/> </Types> let $workbook := <workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"> <sheets> <sheet name="Sheet1" sheetId="1" r:id="rId1" /> </sheets> </workbook> let $rels := <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="workbook.xml"/> </Relationships> let $workbookrels := <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="sheet1.xml"/> </Relationships> let $date := xs:string(fn:current-date()) let $day := fn:tokenize($date, "\+")[1] let $xml := local:AgentReport() let $page := xdmp:tidy(xdmp:quote($xml), <options xmlns="xdmp:tidy"> <input-xml>true</input-xml> </options>)[2] let $tables := $page let $sheet1 := <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <sheetData> {local:getRows($tables)} </sheetData> </worksheet> let $package := local:generate-simple-xl-ooxml($content-types, $workbook, $rels, $workbookrels, $sheet1) let $filename := "ExcelTest.xlsx" let $disposition := concat("attachment; filename=""",$filename,"""") let $x := xdmp:add-response-header("Content-Disposition", $disposition) let $x := xdmp:set-response-content-type("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") let $insertReport := xdmp:document-insert(concat("/GroupNumberReport/Group-", $day, ".xlsx"), $package, (), "GroupReport") let $saveReport := xdmp:save(concat("C:\EriePoc\DataStage-Demo\Report\Group-", $day, ".xlsx"), $package) return fn:true() 

创build两张工作表excel(不工作,即创build损坏的excelsheet)。

 declare namespace ms = "http://schemas.openxmlformats.org/spreadsheetml/2006/main" ; declare namespace ns2 = "http://www.example.com/"; declare function local:AgentReport() { <AgentReport> <Report> <GroupNumber>1</GroupNumber> <Quotes>1</Quotes> <Converted>1</Converted> <Conv_Rate>1</Conv_Rate> </Report> <Report> <GroupNumber>2</GroupNumber> <Quotes>2</Quotes> <Converted>2</Converted> <Conv_Rate>2</Conv_Rate> </Report> </AgentReport> }; declare function local:getRows( $x ) as element(ms:row)* { let $first-row := <ms:row> { for $i in $x/*/*[1]/child::element() return <ms:ct="inlineStr"> <ms:is> <ms:t>{fn:node-name($i)}</ms:t> </ms:is> </ms:c> } </ms:row> return ( $first-row, for $each in $x//Report return <ms:row> { for $i in $each/* return <ms:ct="inlineStr"> <ms:is> <ms:t>{$i/string()}</ms:t> </ms:is> </ms:c> } </ms:row> ) }; declare function local:generate-simple-xl-ooxml( $content-types as node(), $workbook as node(), $rels as node(), $workbookrels as node(), $sheet1 as node(), $sheet2 as node() ) as binary() { let $manifest := <parts xmlns="xdmp:zip"> <part>[Content_Types].xml</part> <part>workbook.xml</part> <part>_rels/.rels</part> <part>_rels/workbook.xml.rels</part> <part>sheet1.xml</part> <part>sheet2.xml</part> </parts> let $parts := ($content-types, $workbook, $rels, $workbookrels, $sheet1, $sheet2) return xdmp:zip-create($manifest, $parts) }; let $content-types := <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"> <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/> <Default Extension="xml" ContentType="application/xml"/> <Override PartName="/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/> <Override PartName="/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/> <Override PartName="/sheet2.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/> </Types> let $workbook := <workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"> <sheets> <sheet name="Sheet1" sheetId="1" r:id="rId1" /> <sheet name="Sheet2" sheetId="2" r:id="rId2" /> </sheets> </workbook> let $rels := <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="workbook.xml"/> <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="workbook.xml"/> </Relationships> let $workbookrels := <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="sheet1.xml"/> <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="sheet2.xml"/> </Relationships> let $date := xs:string(fn:current-date()) let $day := fn:tokenize($date, "\+")[1] let $xml := local:AgentReport() let $page := xdmp:tidy(xdmp:quote($xml), <options xmlns="xdmp:tidy"> <input-xml>true</input-xml> </options>)[2] let $tables := $page let $sheet1 := <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <sheetData> {local:getRows($tables)} </sheetData> </worksheet> let $sheet2 := <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <sheetData> {local:getRows($tables)} </sheetData> </worksheet> let $package := local:generate-simple-xl-ooxml($content-types, $workbook, $rels, $workbookrels, $sheet1, $sheet2) let $filename := "ExcelTest.xlsx" let $disposition := concat("attachment; filename=""",$filename,"""") let $x := xdmp:add-response-header("Content-Disposition", $disposition) let $x := xdmp:set-response-content-type("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") let $insertReport := xdmp:document-insert(concat("/GroupNumberReport/Group-", $day, ".xlsx"), $package, (), "GroupReport") let $saveReport := xdmp:save(concat("C:\EriePoc\DataStage-Demo\Report\Group-", $day, ".xlsx"), $package) return fn:true() 

问题是你有一个额外的关系元素是不需要的,并导致问题。

将您的$relsvariables更改为:

 let $rels := <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="workbook.xml"/> </Relationships> 

不幸的是,MS Office通常不会提供任何有用的迹象,说明哪里或哪些错误。 事情要么是工作,要么是没有什么错误的信息。

我发现testing一些小的变化,以及从MS Office应用程序中的工作实例文件中保存,然后比较* .xlsx压缩文件中的单个文件,以发现什么可行,什么不可行,吨。