繁体   English   中英

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

[英]How to convert ms office spreadsheet xml content into xlsx in Silverlight?

我有这样的电子表格XML

<?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中打开该文件时,它会显示类似msg的消息

“您尝试打开的文件的格式不同于文件扩展名所指定的格式”。

另存为XLSX不起作用。

我建议使用XmlReaderXDocumentXmlDocument类读取xml文件。 然后,使用Open XML SDK可以创建一个excel文件。

Open XML SDK具有较高的学习曲线。 因此,您可能还想看看Closed XML ,它是Open XML SDK的包装,并且学习曲线较为柔和。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM