如何在Silverlight中将ms office电子表格xml内容转换为xlsx?

时间:2014-06-12 15:44:12

标签: c# xml excel silverlight

我像这样传播表格

<?xml version="1.0"?>
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
    <ss:Styles>
        <ss:Style ss:ID="1">
            <ss:Font ss:Bold="1"/>
        </ss:Style>
    </ss:Styles>
    <ss:Worksheet ss:Name="Sheet1">
        <ss:Table>
            <ss:Column ss:Width="80"/>
            <ss:Column ss:Width="80"/>
            <ss:Column ss:Width="80"/>
            <ss:Row ss:StyleID="1">
                <ss:Cell>
                    <ss:Data ss:Type="String">First Name</ss:Data>
                </ss:Cell>
                <ss:Cell>
                    <ss:Data ss:Type="String">Last Name</ss:Data>
                </ss:Cell>
                <ss:Cell>
                    <ss:Data ss:Type="String">Phone Number</ss:Data>
                </ss:Cell>
            </ss:Row>          

            <ss:Row>
                <ss:Cell>
                    <ss:Data ss:Type="String">Kevin</ss:Data>
                </ss:Cell>
                <ss:Cell>
                    <ss:Data ss:Type="String">Boske</ss:Data>
                </ss:Cell>
                <ss:Cell>
                    <ss:Data ss:Type="String">(425) 123-4567</ss:Data>
                </ss:Cell>
            </ss:Row>
        </ss:Table>
    </ss:Worksheet>
</ss:Workbook>

我想将此xml转换为xlsx。

我尝试的是

private void btnExport_Click(object sender, RoutedEventArgs e)
    {
            SaveFileDialog Savedlg = new SaveFileDialog();
            Savedlg.Filter = "XLS (.xls)|*.xls|xlsx (.xlsx)|*.xlsx";
            byte[] xlfile = this.byts;
            if ((bool)Savedlg.ShowDialog())
            {
                System.IO.MemoryStream mStream = new System.IO.MemoryStream();
                mStream.Write(xlfile, 0, xlfile.Length);
                Stream fileStream = Savedlg.OpenFile();
                mStream.WriteTo(fileStream);
                fileStream.Close();
            }



    }

    byte[] byts = null;
    private void import_Click(object sender, RoutedEventArgs e)
    {
        OpenFileDialog openFileDialog1 = new OpenFileDialog();           
        openFileDialog1.ShowDialog();
        System.IO.Stream fileStream = openFileDialog1.File.OpenRead();           
       this.byts= ReadFully(fileStream);
    }

    public static byte[] ReadFully(Stream input)
    {
        byte[] buffer = new byte[16 * 1024];
        using (MemoryStream ms = new MemoryStream())
        {
            int read;
            while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                ms.Write(buffer, 0, read);
            }
            return ms.ToArray();
        }
    }

另存为XLS工作正常,当在EXCEL中打开文件时,它会显示一个像

这样的消息

“您尝试打开的文件采用不同的格式,然后由文件扩展名”。

指定

保存为XLSX无效。

1 个答案:

答案 0 :(得分:0)

我建议您使用XmlReaderXDocumentXmlDocument类来阅读xml文件。然后使用Open XML SDK,您可以创建一个Excel文件。

Open XML SDK具有很高的学习曲线。因此,您可能还需要查看Closed XML,它是Open XML SDK的包装器,并且具有更温和的学习曲线。