Вопрос

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

В настоящее время я использую ExcelPackage, который имеет некоторые действительно серьезные недостатки и проблемы.Поскольку мне не нужно создавать чрезмерно сложные листы Excel (самая "сложная" вещь заключается в том, что мне явно нужно установить тип ячейки числовой или текстовый), я смотрю на следующий вариант 1, но мне просто интересно, есть ли какие-либо другие хорошие и поддерживаемые способы создания листов Excel 2007?Бонусные баллы, если их можно создать без необходимости сохранять на жесткий диск, т.е.генерируйте и непосредственно выводите их в поток.

целью здесь является .net 3.0, а не 3.5 goodness :(

Редактировать: Пока что спасибо.XML SDK действительно только 3.5, но Russian Roulet...эмм...COM-взаимодействие - это также то, чего я хочу избегать, когда это возможно, тем более, что Excel 2007 имеет несколько сложный, но все же довольно простой в создании формат документа.Я ознакомлюсь с различными размещенными ссылками и подсказками.

Это было полезно?

Решение

Вы могли бы попробовать использовать Office Open XML SDK.Это позволит вам создавать файлы Excel в памяти, используя, скажем, MemoryStream и гораздо проще, чем генерировать весь XML вручную.

Как отметил Брайан Ким, для версии 2.0 SDK требуется .NET 3.5, который, как вы заявили, недоступен. Версия 1 также доступен пакет SDK, который поддерживает .NET 3.0.Он не такой полный, но, по крайней мере, поможет вам управлять XML-частями документа и взаимосвязями между ними.

Другие советы

Я просто создаю 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 и т.д.И сгенерировать его чертовски просто.

Я собирался прокомментировать пост Бкиммела, но, видимо, у меня пока недостаточно SO cool points.

Если 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

Я выполнил большую часть работы с открытым XML (xlsx) в Устройство электронных таблиц для .NET и это далеко не тривиальное упражнение.Я рекомендую использовать Office Open XML SDK или другую стороннюю библиотеку, такую как SpreadsheetGear, или одного из наших конкурентов (просто погуглите "SpreadsheetGear", чтобы узнать, кто наши конкуренты).

SpreadsheetGear для .NET, казалось бы, соответствует вашим потребностям:

  • Работает с .NET 2.0, .NET 3.0 и .NET 3.5.
  • Поддерживает запись в поток с помощью IWorkbook.SaveToStream или запись в массив байтов с помощью IWorkbook.SaveToMemory.
  • Поддерживает рабочие книги Excel 97-2003 (xls), что, вероятно, будет следующим, о чем вас попросят, если вам нужно поддерживать очень много пользователей.

Вы можете скачать бесплатную, полностью функциональную оценку здесь.

Excel очень легко поддается написанию с помощью COM-объектов.Я не пробовал, но это должно быть надежное решение, хотя и не быстрое и не легкое.

Что бы вы в конечном итоге ни делали, проверьте, поддерживает ли ваше решение Unicode.Я столкнулся с некоторыми серьезными проблемами при использовании существующих решений для записи файлов xls (то есть файлов до 2007 года).

Вы можете использовать первичные сборки взаимодействия (Office API) для программной генерации документов Excel - я бы не хотел делать с ними ничего чрезмерно сложного, но не похоже, что это ваше требование.

Этот подход должен работать и для создания документов в памяти.

Вот некоторые ресурсы:

Раньше я генерировал Разметка обработки текста документы, использующие библиотеку функций для создания правильного XML-кода для таблиц и абзацев.

Затем я просто изменил тип MIME для заголовка ответа на документ Word и отправил XML в качестве ответа клиенту.Он либо открывается в их браузере, либо сохраняется в виде файла.

Похоже, что для Excel не существует того же SDK 2003, хотя он есть MS Open XML SDK

Каждый живой программист-сноб ненавидит vbscript, но он прост и работает:

Set myxlapp = CreateObject("Excel.Application")
Set mywb = myxlapp.Workbooks.Add
myxlapp.Visible = true

Поместите это в текстовый файл, добавьте ".vbs" в конце и вуаля.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top