繁体   English   中英

XML转换为Excel(2007)使用Windows XP和C#.Net的想法

[英]XML to Excel (2007) Ideas using Windows XP, and C#.Net

我有一个数据集,我已将其修改为xml文档,然后使用xsl工作表将其转换为Excel xml格式,以允许从应用程序以编程方式打开数据。 我遇到了两个问题:

  1. Excel不是打开Excel文件的默认Windows应用程序,因此,运行Program.Start(“ xmlfilename.xml”)时,将打开IE,并且XML文件的可读性不高。

  2. 如果将文件重命名为.xlsx,则会收到警告,“这不是excel文件,您要继续吗”。 这对于客户而言并不理想。

理想情况下,我希望Windows在Excel中打开文件而无需修改用于打开Excel文件的默认操作系统设置。 Office互操作是可能的,但对于此应用程序似乎有点过大。 有谁有任何想法使这项工作吗?

该解决方案在.Net / C#中,但是我对创建干净解决方案的其他可能性持开放态度。

如果将以下内容插入XML的第二行,它将指示Windows使用Excel打开

<?mso-application progid="Excel.Sheet"?>

如果将文件另存为XML-Excel的扩展名xlsx,该怎么办?

Process.Start(@"C:\Program Files\Microsoft Office\Officexx\excel.exe", "yourfile.xml");

话虽如此,您仍然会收到消息框。 我想您可以使用Interop,但是我不确定它对您的效果如何。

希望这可以帮助。

MSDN中的OpenXML- http://msdn.microsoft.com/zh-cn/library/microsoft.office.interop.excel.workbooks.openxml( v=office.11​​) .aspx

using Excel = Microsoft.Office.Interop.Excel;

string workbookPath= @"C:\temp\Results_2013Apr02_110133_6692.xml";

            this.lblResultFile.Text = string.Format(@" File:{0}",workbookPath);
            if (File.Exists(workbookPath))
            {
                Excel.Application excelApp = new Excel.Application();
                excelApp.Visible = true;
                Excel.Workbook excelWorkbook = excelApp.Workbooks.OpenXML(workbookPath, Type.Missing, Excel.XlXmlLoadOption.xlXmlLoadPromptUser);
            }
            else
            {
                MessageBox.Show(String.Format("File:{0} does not exists", workbookPath));
            }

如Sam所述,xlsx文件扩展名可能是一个不错的选择。 但是,除了将XML文件另存为xlsx之外,还涉及更多的工作。 xlsx实际上是一个zip文件,在文件夹内有许多xml文件。 我在这里找到了一些不错的示例代码,尽管我没有亲自尝试 ,但似乎可以给出一些很好的解释。

预先为插入第三方库而道歉,我知道它不是免费的,但是我使用TMS Software的FlexCel Studio 如果您想做的不仅仅是转储数据(格式设置,动态交叉表等),它会很好地工作。 我们每周使用它生成数百份报告。

FlexCel接受强类型的数据集,它可以根据关系对数据进行分组,并且生成的Excel文件看起来比从Crystal Reports excel导出中获得的文件干净得多。 我已经完成了Crystal Reports和OLE自动化的工作。 FlexCel的价格为125美元(欧盟)。

暂无
暂无

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

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