Отображение XML в Excel - PullRequest
       15

Отображение XML в Excel

2 голосов
/ 19 декабря 2011

Я пытаюсь экспортировать некоторые данные в Excel, используя XML. Вот пример моего кода, который генерирует файл Excel:

    Private Sub ExportToExcel()
    Dim fs As New IO.StreamWriter("exported.xls", False)
    fs.WriteLine("<?xml version=""1.0""?>")
    fs.WriteLine("<?mso-application progid=""Excel.Sheet""?>")
    fs.WriteLine("<Workbook xmlns:ss=""urn:schemas-microsoft-com: Office:spreadsheet"">")

    ' Create the styles for the worksheet
    fs.WriteLine(" <Styles>")

    ' Style for the column headers
    fs.WriteLine(" <Style ss:ID=""1"">")
    fs.WriteLine(" <Font ss:Bold=""1""/>")
    fs.WriteLine(" <Alignment ss:Horizontal=""Center"" ss:Vertical=""Center"" " & _
    "ss:WrapText=""1""/>")
    fs.WriteLine(" <Interior ss:Color=""#C0C0C0"" ss:Pattern=""Solid""/>")
    fs.WriteLine(" </Style>")

    ' Style for the column information
    fs.WriteLine(" <Style ss:ID=""2"">")
    fs.WriteLine(" <Alignment ss:Vertical=""Center"" ss:WrapText=""1""/>")
    fs.WriteLine(" </Style>")
    fs.WriteLine(" </Styles>")

    ' Write the worksheet contents
    fs.WriteLine("<Worksheet ss:Name=""Data Export"">")
    fs.WriteLine(" <Table>")

    For i As Integer = 0 To 1
        fs.WriteLine(" <Row>")
        For j As Integer = 0 To 2
            fs.WriteLine(" <Cell>")
            fs.WriteLine(" <Data ss:Type=""String"">H</Data>")
            fs.WriteLine(" </Cell>")
        Next
        fs.WriteLine(" </Row>")
    Next

        ' Close up the document
        fs.WriteLine(" </Table>")
        fs.WriteLine("</Worksheet>")
        fs.WriteLine("</Workbook>")

        fs.Close()

End Sub

И вот что у меня в сгенерированном файле xls:

    <?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns:ss="urn:schemas-microsoft-com: Office:spreadsheet">
 <Styles>
 <Style ss:ID="1">
 <Font ss:Bold="1"/>
 <Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
 <Interior ss:Color="#C0C0C0" ss:Pattern="Solid"/>
 </Style>
 <Style ss:ID="2">
 <Alignment ss:Vertical="Center" ss:WrapText="1"/>
 </Style>
 </Styles>
<Worksheet ss:Name="Data Export">
 <Table>
 <Row>
 <Cell>
 <Data ss:Type="String">H</Data>
 </Cell>
 <Cell>
 <Data ss:Type="String">H</Data>
 </Cell>
 <Cell>
 <Data ss:Type="String">H</Data>
 </Cell>
 </Row>
 <Row>
 <Cell>
 <Data ss:Type="String">H</Data>
 </Cell>
 <Cell>
 <Data ss:Type="String">H</Data>
 </Cell>
 <Cell>
 <Data ss:Type="String">H</Data>
 </Cell>
 </Row>
 </Table>
</Worksheet>
</Workbook>

Кажется, это правильно, но когда я открываю xls, я получаю сумасшедший вывод: enter image description here

Но это еще не все: если я вручную пишу структуру xml в свой файл xsl (или, например, копирую и вставляю ее из другого файла), вывод в порядке - я вижу строки и столбцы с правильными значениями (H, H, H везде), форматирование, название листа «Экспорт данных», как я его установил ... не понимаю :( Пожалуйста, объясните мне кого-то. Спасибо большое !!!

1 Ответ

2 голосов
/ 10 марта 2012

Просто замените строку

fs.WriteLine("<Workbook xmlns:ss=""urn:schemas-microsoft-com: Office:spreadsheet"">")

на

fs.WriteLine("<Workbook xmlns=""urn:schemas-microsoft-com:office:spreadsheet""")
fs.WriteLine("xmlns:o=""urn:schemas-microsoft-com:office:office""")
fs.WriteLine("xmlns:x=""urn:schemas-microsoft-com:office:excel""")
fs.WriteLine("xmlns:ss=""urn:schemas-microsoft-com:office:spreadsheet"">")

Это решит проблемы

1. Output of the sheet
2. Name of the worksheet 

Output File

...