Программное создание таблиц Excel 2007
Я пытаюсь создать документы Excel 2007 программно. Теперь я нашел два способа:
В настоящее время я использую ExcelPackage, который имеет некоторые действительно серьезные недостатки и проблемы. Поскольку мне не нужно создавать слишком сложные листы Excel (самая "сложная" вещь заключается в том, что мне явно нужно установить тип ячейки на числовой или текстовый), я смотрю на вариант 1 следующий, но мне просто интересно, есть ли любые другие хорошие и поддерживаемые способы генерации таблиц Excel 2007? Бонусные очки, если они могут быть созданы без необходимости сохранять их на жестком диске, т.е. Генерировать и напрямую выводить их в поток.
.net 3.0 - это цель здесь, нет 3.5 доброты: (
Изменить: Спасибо. XML SDK действительно 3.5, но русский Roulet... erm... COM Interop также я хочу избежать, когда это возможно, тем более, что Excel 2007 имеет несколько сложный, но довольно простой способ создания формата документа. Я посмотрю различные ссылки и подсказки.
Ответы
Ответ 1
Вы можете попробовать использовать Office Open XML SDK. Это позволит вам создавать файлы Excel в памяти, используя MemoryStream
и гораздо проще, чем создавать все XML вручную.
Как отметил Брайан Ким, версия 2.0 SDK требует, чтобы .NET 3.5, о котором вы заявили, недоступен. Версия 1 SDK также доступна, которая поддерживает .NET 3.0. Это не так полно, но, по крайней мере, поможет вам управлять XML-частями документа и отношениями между ними.
Ответ 2
Я просто создаю таблицу HTML, которую можно открыть Excel:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Wnioski</title>
<style type="text/css">
<!--
br { mso-data-placement: same-cell; }
td { mso-number-format: \@; mso-displayed-decimal-separator: "."; }
-->
</style>
<table>
<tr style="height:15.0pt">
<td style="mso-number-format: general">474</td>
<td>474</td>
<tr>
<td>data2</td>
<td>data3</td>
<tr>
<td style="mso-number-format: "yyyy-mm-dd"">2008-10-01</td>
<td style="mso-number-format: standard">0.00</td>
<tr>
<td style="mso-number-format: general">line1<br>line2<br>line3</td>
<td></td>
</table>
Это хорошо работает также как источник данных для последовательных букв в Word, работает с OpenOffice calc и т.д. И он мертв просто для генерации.
Ответ 3
Я собирался прокомментировать сообщение BKimmel, но, видимо, у меня пока еще не хватает SO прохладных очков.
Если Excel уже открыт, вы можете получить это раздражающее сообщение "personal.xls уже открыто". Сначала я пытаюсь получить приложение. Если это не удается, создайте его:
On Error Resume Next
Set myxlApp = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
Err.Clear
Set myxlApp = CreateObject("Excel.Application")
If Err.Number <> 0 Then
' return False, show message, etc.
End If
End If
Ответ 4
Я сделал большую часть работы Open XML (xlsx) в SpreadsheetGear для .NET, и это далеко не тривиальное упражнение. Я рекомендую использовать Office Open XML SDK или другую стороннюю библиотеку, такую как SpreadsheetGear или один из наших конкурентов (просто Google "SpreadsheetGear", чтобы узнать, кто наши конкуренты).
SpreadsheetGear для .NET, похоже, отвечает вашим потребностям:
- Работает с .NET 2.0,.NET 3.0 и .NET 3.5.
- Поддерживает запись в поток с помощью IWorkbook.SaveToStream или запись в массив байтов с помощью IWorkbook.SaveToMemory.
- Поддерживает Excel 97-2003 (xls) книги, которые, вероятно, будут следующей вещью, о которой вы попросите, если вам нужно поддерживать очень много пользователей.
Вы можете загрузить бесплатную, функциональную оценку здесь.
Ответ 5
Я использовал для создания Wordprocessing Markup документы, используя библиотеку функций для создания правильного XML для таблиц и абзацев.
Затем я просто изменил тип MIME для заголовка Response как документ Word и отправил XML в качестве ответа клиенту. Он либо открывается в браузере, либо сохраняется как файл.
Кажется, что один и тот же 2003 SDK для Excel не существует, хотя есть MS Open XML SDK
Ответ 6
Excel очень удобен для сценариев через COM-объекты. Я не пробовал, но это должно быть прочное решение, хотя и не быстрое и легкое.
Что бы вы ни делали, проверьте, поддерживает ли ваше решение Unicode. У меня возникли серьезные проблемы с использованием существующих решений для написания файлов xls (то есть файлов pre 2007).
Ответ 7
Вы можете использовать Primary Interop Assemblies (Office API) для программного создания документов Excel - я бы не хотел делать что-то слишком сложное, используя их, но это не похоже на то, что это ваше требование.
Этот подход должен работать и для создания документов в памяти.
Вот некоторые ресурсы:
Ответ 8
Каждый код-snob жив ненавидит vbscript, но он прост и работает:
Set myxlapp = CreateObject("Excel.Application")
Set mywb = myxlapp.Workbooks.Add
myxlapp.Visible = true
Поместите это в текстовый файл, добавьте ".vbs" в конце и в престо.