XML в Excel (2007 г.) Идеи с использованием Windows XP и C#.Net
Вопрос
У меня есть набор данных, который я преобразовал в документ xml, а затем использовал лист xsl для преобразования в формат Excel xml, чтобы можно было программно открывать данные из моего приложения.При этом я столкнулся с двумя проблемами:
Excel не является приложением Windows по умолчанию для открытия файлов Excel, поэтому при запуске Program.Start("xmlfilename.xml") открывается IE, и XML-файл не очень читаем.
Если вы переименуете файл в .xlsx, вы получите предупреждение: «Это не файл Excel. Продолжить».Это не идеально для клиентов.
В идеале я бы хотел, чтобы Windows открывала файл в Excel без изменения настроек ОС по умолчанию для открытия файлов Excel.Взаимодействие с Office возможно, но для этого приложения это кажется излишним.Есть ли у кого-нибудь идеи, как сделать эту работу?
Решение находится в .Net/C#, но я открыт для других возможностей создания чистого решения.
Решение
Process.Start(@"C:\Program Files\Microsoft Office\Officexx\excel.exe", "yourfile.xml");
При этом вы все равно получите окно сообщения.Я предполагаю, что вы могли бы использовать Interop, но я не уверен, насколько хорошо он вам подойдет.
Другие советы
Если вы вставите следующее во вторую строку вашего XML, Windows будет открыта с помощью Excel.
<?mso-application progid="Excel.Sheet"?>
Что, если вы сохраните файл в формате xlsx — расширении XML-Excel?
Как упомянул Сэм, расширение файла xlsx, вероятно, является хорошим вариантом.Однако здесь требуется нечто большее, чем просто сохранение XML-файла в формате xlsx.На самом деле xlsx — это zip-файл с кучей XML-файлов внутри папок.Я нашел хороший пример кода здесь что, кажется, дает некоторые хорошие объяснения, хотя лично я не пробовал.
Заранее извиняюсь за подключение сторонней библиотеки, и я знаю, что она не бесплатна, но я использую ФлексСел Студия от программного обеспечения TMS.Если вы хотите сделать больше, чем просто выгрузить данные (форматирование, динамические перекрестные таблицы и т. д.), это работает очень хорошо.Используя его, мы генерируем сотни отчетов в неделю.
FlexCel принимает строго типизированные наборы данных, может группировать данные в соответствии с отношениями, а созданный файл Excel выглядит намного чище, чем тот, который можно получить при экспорте Excel в Crystal Reports.Я сделал кристаллические отчеты и автоматизацию OLE.FlexCel — это кража по цене 125 европейских долларов.
Надеюсь это поможет.
OpenXML в MSDN — http://msdn.microsoft.com/en-us/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));
}