2009-08-25 10 views
4

Простой вопрос. Кто-нибудь знает простой способ преобразования SpreadsheetML (Excel 2003 XML) в XML-документ Open, используемый для файлов Excel 2007 (xlsx)?Excel Преобразование SpreadsheetML в Open XML (XLSX)

У меня есть библиотека, которая, к сожалению, не читает XML-формат, поэтому мне нужно попытаться найти способ прочитать данные, которые не связаны с другой библиотекой.

Любые предложения оценены.

+0

Bit подробнее. Причина, по которой я не могу/не могу использовать Interop, потому что это может быть серверный процесс, для которого Interop не работает. Библиотека, которую я использую в настоящее время, является обходным решением, но поддерживает только файлы XLS и XLSX. У меня недавно появилось новое требование, которое должно работать с другой функцией, которая создает XML, подходящий для Excel 2003. Однако это не поддерживается/не будет поддерживаться библиотекой, поэтому я пытаюсь найти способ вокруг этого. – Ian

ответ

1

Формат файла существенно изменился от SpreadsheetML до Office Open XML.

И, поскольку теперь файлы таблиц разбиты на несколько XML-файлов (все они затем застряли), нет никакой надежды на легкое решение XLST.

Наиболее простым способом, к сожалению, является автоматизация Excel с использованием макроса для открытия каждого файла SpreadsheetML и создания «Сохранить как» в более новом формате. Это можно сделать в Office 2003 с подключаемым модулем формата Office 2007. Возможно, это может быть отнесено к пакетному процессу, поэтому сервер не участвует напрямую?

Если данные в электронных таблицах тривиальны и соответствуют согласованному формату, вы можете написать собственный парсер для непосредственного импорта из файлов SpreadsheetML.

+0

Думайте, что нам, возможно, придется делать их вручную, и просто установите определенные ограничения для пользователя в зависимости от того, автоматизирован он или нет. Спасибо – Ian

1

Простым способом было бы использовать COM-библиотеку Excel (Excel 2007), но я думаю, что это не тот ответ, который вы ищете.

На что способна ваша библиотека? Вы можете использовать Open XML SDK 2.0 для записи документа электронной таблицы на основе вывода вашей библиотеки.

С наилучшими пожеланиями

+0

Просто проверил это, но, к сожалению, нет, поскольку мы в настоящее время должны строить против .NET 2.0. – Ian

0

IIRC Управление формат 2003 работает как OpenDocument формат: Это ZIP-файл с файлами XML внутри, так (если у вас есть достаточно времени/мужества), вы можете открыть его, найти файл XML, содержащий данных и, наконец, иметь дело с XML.

Я знаю, этот ответ для отважных разработчиков;)

С уважением.

+2

Однако XML в zip-файле XLSX значительно отличается от XML в формате Excel 2003 XML. – Ian

+0

Я боюсь, что это «особенность» у парней M $, но вы там, чтобы заполнить пробел;) – ATorras

+0

Да, WordprocessingML! = OpenXML. – BrainSlugs83

2

Если у вас есть глубокие карманы, Aspose.Cells может читать/записывать оба формата и обеспечивать простое преобразование без автоматизации.

http://www.aspose.com/categories/.net-components/aspose.cells-for-.net/default.aspx

Aspose.Cells для .NET

Aspose.Cells для .NET является наградами Spreadsheet компонент, который позволяет разработчикам .NET встраивать способность читать, писать и манипулировать таблицами Excel в своих приложениях, не полагаясь на Microsoft Excel.

Aspose.Cells for .NET - это зрелый, масштабируемый и многофункциональный компонент, который предлагает множество функций, которые превосходят возможности простого экспорта данных другими производителями. С помощью Aspose.Cells для .NET разработчики могут экспортировать данные, форматировать электронные таблицы на самый узкий уровень, импортировать изображения, импортировать диаграммы, создавать диаграммы, применять и вычислять сложные формулы, передавать данные Excel, сохранять в различных форматах и ​​многое другое - все это без необходимость использования Microsoft Excel или Microsoft Office Automation.

Ценообразование начинается с 899 долл. США на одного разработчика для развития предприятия (внутреннего) и идет оттуда очень круто.

+0

+1, потому что действительно Aspose выполнил бы эту работу и на самом деле обошел бы проблему в первую очередь. В конце концов, хотя я написал свой собственный синтаксический анализатор, чтобы перестроить таблицу, используя API, который мы уже приобрели. – Ian

1

Попробуйте использовать JODConverter. JODConverter позволяет преобразовать SpreadsheetML с помощью механизма OpenOffice.org или Libreoffice.

+0

Похож на заброшенный проект? – BrainSlugs83

0

проверить этот код статической силы XlsToXlsx

static void XlsToXlsx (string sourceFile, string destinationFile) 
{ 
    Type officeType = Type.GetTypeFromProgID("Excel.Application"); 

    Excel.Application app = new Excel.Application(); 
    app.DisplayAlerts = false; 
    // Open Excel Workbook for conversion. 
    Excel.Workbook excelWorkbook = app.Workbooks.Open(sourceFile); 
    // Save file as CSV file. 
    //excelWorkbook.SaveAs(destinationFile, Excel.XlFileFormat.xlCSV); 
    excelWorkbook.SaveAs(destinationFile, Excel.XlFileFormat.xlOpenXMLWorkbook); 
    // Close the Workbook. 
    excelWorkbook.Close(); 
    // Quit Excel Application. 
    app.Quit(); 
} 
Смежные вопросы