Я пытаюсь написать сценарий VBS, который возьмет строку XML и вставляет ее в Excel с помощью таблицы стилей XSL.Excel VBA - Вставка XML из строки
Я сделал что-то подобное недавно в Word, а функция InsertXML взяла XSL-файл в качестве одного из параметров. Тем не менее, это не так просто в Excel.
Я немного обескуражен всей концепцией карт и схем.
Функция XmlImportXml примет строку, но также нужна карта.
Я пробовал Maps.Add (strXML), но тогда нет возможности применить таблицу стилей.
Я пробовал предварительно перевести свой XML с помощью функции transformNode XMLDOM, но затем Maps.Add полностью смущен моей компоновкой. (Если я экспортирую преобразованный XML в файл, а затем откройте этот XML в Excel, это именно то, что я хочу).
Создание схемы требует XMLTools? У меня нет прав администратора, чтобы установить его.
Я даже попытался сохранить файл XML и определить таблицу стилей заранее, но когда я его открываю, Excel по-прежнему говорит, что у меня нет определенной схемы.
Есть много ресурсов для создания таблиц стилей Excel XLS, поэтому я чувствую, что мне не хватает чего-то очень простого о том, как их использовать.
В случае, если вам это нужно, вот некоторые примеры XML:
<?xml version="1.0" standalone="yes" ?>
<?xml-stylesheet type="text/xsl" href="Snapshot_Excel.xsl"?>
<RpcData SrcNm="SnapshotBuckets" SrcTyp="DIR" ClientID="000" LoanNo="0000000000" Borrower="" RsltCd="0">
<RepeatingFieldSet Nm="Hazard" Type="All Data" Count="3">
<Row Index="1">
<Fld Nm="Type">A</Fld>
<Fld Nm="AgentCode">TESTAP</Fld>
<Fld Nm="Agent City">ANYTOWN</Fld>
<Fld Nm="Agent Desc Line 1">APPLE</Fld>
<Fld Nm="Agent Desc Line 2">PICKERS</Fld>
<Fld Nm="Agent Desc Line 3">123 MAIN ST</Fld>
<Fld Nm="Agent Phone">(718) 555-1212</Fld>
<Fld Nm="Agent State">AL</Fld>
<Fld Nm="Agent ZIP Code">00001</Fld>
</Row>
<Row Index="2">
<Fld Nm="Type">B</Fld>
<Fld Nm="AgentCode">TESTBA</Fld>
<Fld Nm="Agent City">ANYTOWN</Fld>
<Fld Nm="Agent Desc Line 1">BANANA</Fld>
<Fld Nm="Agent Desc Line 2">BUNCHERS</Fld>
<Fld Nm="Agent Desc Line 3">456 MAIN ST</Fld>
<Fld Nm="Agent Phone">(718) 555-1213</Fld>
<Fld Nm="Agent State">AK</Fld>
<Fld Nm="Agent ZIP Code">00002</Fld>
</Row>
<Row Index="3">
<Fld Nm="Type">C</Fld>
<Fld Nm="AgentCode">TESTCH</Fld>
<Fld Nm="Agent City">ANYTOWN</Fld>
<Fld Nm="Agent Desc Line 1">CHERRY</Fld>
<Fld Nm="Agent Desc Line 2">PITTERS</Fld>
<Fld Nm="Agent Desc Line 3">789 MAIN ST</Fld>
<Fld Nm="Agent Phone">(718) 555-1214</Fld>
<Fld Nm="Agent State">CA</Fld>
<Fld Nm="Agent ZIP Code">00003</Fld>
</Row>
</RepeatingFieldSet>
</RpcData>
И мой XSL файл:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:x="urn:schemas-microsoft-com:office:excel">
<xsl:template match="/RpcData">
<xsl:variable name="col" select="RepeatingFieldSet/Row"/>
<xsl:variable name="row" select="RepeatingFieldSet/Row[1]/Fld"/>
<Workbook>
<Worksheet ss:Name="Sheet1">
<Table>
<!-- header row -->
<Row>
<Cell>
<Data ss:Type="String">Field</Data>
</Cell>
<xsl:for-each select="$col">
<Cell>
<Data ss:Type="String"><xsl:value-of select="@Index"/></Data>
</Cell>
</xsl:for-each>
</Row>
<!-- data rows -->
<xsl:for-each select="$row">
<xsl:variable name="i" select="position()"/>
<Row>
<Cell>
<Data ss:Type="String"><xsl:value-of select="@Nm"/></Data>
</Cell>
<xsl:for-each select="$col">
<Cell>
<Data ss:Type="String"><xsl:value-of select="Fld[$i]"/></Data>
</Cell>
</xsl:for-each>
</Row>
</xsl:for-each>
</Table>
</Worksheet>
</Workbook>
</xsl:template>
</xsl:stylesheet>
Заранее спасибо!
Спасибо! Первый метод дает мне приглашение пользователя выбрать XSL, а затем сообщение о том, что файл находится в другом формате файла, чем расширение. К счастью, второй метод загружает преобразованный XML правильно без приглашения пользователя. Но я действительно надеялся, что смогу вставить XML непосредственно из строки. У меня есть четыре XML, которые я пытаюсь загрузить в разные листы в книге. Полагаю, это просто невозможно? – ImagineMBE
Если xsl объявлен в инструкции процесса xml ' Xml-stylesheet ...?>', Вам не следует запрашивать. Xsl должен находиться в том же каталоге, что и xml или дочерние папки 'href = 'childfolder/script.xsl'. Кроме того, просто сохраните XML-строку в файл, поскольку 'OpenXML' запускает один wb за время, требующее XML-файлов. Рассмотрим объединение четырех листов в один. – Parfait