Программное создание таблиц Excel 2007

Я пытаюсь создать документы Excel 2007 программно. Теперь я нашел два способа:

  • Вручную создаем XML, как описано в этом сообщении
  • Использование библиотеки сторонних разработчиков, например ExcelPackage.

В настоящее время я использую 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: &quot;yyyy-mm-dd&quot;">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" в конце и в престо.