Программное создание листов Excel 2007 - PullRequest
14 голосов
/ 30 сентября 2008

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

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

.net 3.0 - цель здесь, нет 3.5 добра: (

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

Ответы [ 8 ]

9 голосов
/ 30 сентября 2008

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

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

2 голосов
/ 01 октября 2008

Я просто генерирую таблицу 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 и т. Д. И создать его очень просто.

1 голос
/ 28 января 2009

Я выполнил большую часть работы с Open XML (xlsx) в SpreadsheetGear for .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), которые, вероятно, будут следующей просьбой, если вам нужно поддерживать очень много пользователей.

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

1 голос
/ 01 октября 2008

Я собирался прокомментировать пост Б.Киммеля, но, видимо, мне пока не хватает ТАКИХ крутых моментов.

Если 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
0 голосов
/ 01 октября 2008

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

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

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

0 голосов
/ 30 сентября 2008

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

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

Вот несколько ресурсов:

0 голосов
/ 30 сентября 2008

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

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

0 голосов
/ 30 сентября 2008

Я использовал для генерации WordPressing Markup документы, используя библиотеку функций для создания правильного XML для таблиц и абзацев.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...