Каталог статей

Главная » Статьи » .NET

Работа с Microsoft Office Word и Microsoft Office Excel посредством ASP.NET 2.0
Статья описывает способ создания офисных документов, возможный при разработке веб-приложений, использование которых будут разрешено определенному (заранее известному) количеству пользователей (например: корпоративный сайт, определенные виды отчетов) 
Предупреждение:
Согласно информации из статьи Consideration for server-side Automation of Office использование технологий Automation на стороне сервера (server-side) может повлечь за собой непредсказуемые проблемы при больших нагрузках и, тем более, при неправильной настройке используемых компонентов. Также Microsoft не рекомендует и, тем более, не поддерживает использование Automation of Microsoft Office.

Тем не менее, при разработке веб-приложений, использование которых будут разрешено определенному (заранее известному) количеству пользователей (например: корпоративный сайт, определенные виды отчетов) можно применить способ создания офисных документов, описанный в данной статье.

Статья посвящена методам автоматической генерации документов в форматах Word и Excel при помощи технологии ASP.NET 2.0. Описаны некоторые методы, используемые для получения работающими через веб-интерфейс пользователями отчетов или других документов из хранимой на сервере информации (например, из базы данных), либо на основании данных, введенных пользователем в веб-форму.

Описанные методы реализованы на языке Visual Basic 8 в модуле, разработанном в среде Microsoft Visual Studio 2005 с использованием ASP.NET 2.0.

Для управления программами Word и Excel из разрабатываемой прикладной системы необходимо в соответствующий проект добавить COM-объекты:
Microsoft Excel 11.0 Object Library – для работы с Excel 

 

 
Microsoft Word 11.0 Object Library – для работы с Word 

 

Добавление осуществляется в среде Microsoft Visual Studio 2005 через пункт Add Reference меню Website.


         Рисунок 1 Добавление ссылки на COM-объект для работы с Excel

       Рисунок 2 Добавление ссылки на COM-объект для работы с Word

После добавления ссылок на COM-объекты в Visual Studio будут доступны соответствующие пространства имен:
Microsoft.Office.Interop.Word – пространство имен Word 

 
Microsoft.Office.Interop.Excel – пространство имен Excel 

 

Далее создается прикладная веб-форма для работы с документами Office. Ниже приведен пример исходного кода:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

  <title>Работа в Word и Excel</title>

</head>

<body>

  <form id="form1" runat="server">

  <div>

  <table>

  <tr>

  <td rowspan="2" style="width: 186px">

  <asp:TextBox ID="TextBox1" runat="server" 
Height="49px" TextMode="MultiLine" Width="231px"></asp:TextBox></td>

  <td>

  <asp:Button ID="bttnSendToWord" runat="server" 
Text="Отправить в WORD" /></td>

  </tr>

  <tr>

  <td>

  <asp:Button ID="SendToExcel" runat="server" 
Text="Отправить в Excel" Width="177px" /></td>

  </tr>

  </table>

  </div>

  </form>

</body>

</html>

Листинг 1 Код веб-формы для работы с документами Office

 

Далее для данной веб-формы создается класс «обработчик событий»:
Imports Microsoft.Office.Interop
Partial Class _Default
  Inherits System.Web.UI.Page

#Region "Функции для работы с Word"
  ''' <summary>
  ''' Функция создания нового экземпляра Word
  ''' </summary>
  ''' <returns>Объект Word.Applicetion</returns>
  Public Function CreateWordObj() As Word.Application
  Dim obj As Object
  Try
  obj = CreateObject("Word.Application") 'Пробуем получить новый 
 экземпляр Word
  Catch ex As Exception
  obj = Nothing
  Throw New Exception("Ошибка создания экземпляра MS Word")
  End Try
  Return obj
  End Function
  ''' <summary>
  ''' Функция создает объект документа Word
  ''' </summary>
  ''' <param name="Path">Путь к документу</param>
  ''' <param name="objWord">Объект Word</param>
  ''' <returns>Объект документа Word</returns>
  Public Function OpenWordFile(ByVal Path As String, ByVal objWord As 
 Word.Application) As Word.Document
  Dim WordFile As String = CopyFileToTmp(Path)
  Dim WordDoc As Word.Document
  Try
  WordDoc = objWord.Documents.Open(WordFile)
  Catch ex As Exception
  WordDoc = Nothing
  Throw ex
  End Try
  Return WordDoc
  End Function
#End Region
#Region "Функции для работы с Excel"
  ''' <summary>
  ''' Функция создания нового экземпляра Excel
  ''' </summary>
  ''' <returns>Объект Excel.Applicetion</returns>
  Public Function CreateExcelObj() As Excel.Application
  Dim obj As Object
  Try
  obj = CreateObject("Excel.Application") 'Пробуем получить новый 
экземпляр Excel
  Catch ex As Exception
  obj = Nothing
  Throw New Exception("Ошибка создания экземпляра MS Excel")
  End Try
  Return obj
  End Function
  ''' <summary>
  ''' Функция создает объект листа Excel
  ''' </summary>
  ''' <param name="Path">Путь к документу</param>
  ''' <param name="objExcel">Объект Excel</param>
  ''' <returns>Объект листа Excel</returns>
  Public Function OpenExcelFile(ByVal Path As String, ByVal objExcel As
  Excel.Application) As Excel.Workbook
  Dim ExcelFile As String = CopyFileToTmp(Path)
  Dim ExcelBook As Excel.Workbook
  Try
  ExcelBook = objExcel.Workbooks.Open(ExcelFile)
  Catch ex As Exception
  ExcelBook = Nothing
  Throw ex
  End Try
  Return ExcelBook
  End Function
#End Region

#Region "Общие функции"
  ''' <summary>
  ''' Функция создает временную копию открываемого файла, для того чтобы 
произвести изменения в нем
  ''' </summary>
  ''' <param name="Path">Путь к файлу</param>
  ''' <returns>Путь к временному файлу</returns>
  Private Function CopyFileToTmp(ByVal Path As String) As String
  Dim WordFile As New IO.FileInfo(Path)
  Dim WordFileTmp As String = ""
  If Not WordFile.Exists Then
  Throw New IO.FileNotFoundException
  End If
  WordFileTmp = FileIO.FileSystem.GetTempFileName()
  FileIO.FileSystem.CopyFile(Path, WordFileTmp, True)
  Return WordFileTmp
  End Function
  ''' <summary>
  ''' Функция отправляет пользователю созданный временный файл
  ''' </summary>
  ''' <param name="Path">Путь к файлу, который необходимо отправить</param>
  ''' <param name="FileName">Имя файла, который получит пользователь</param>
  Public Sub SendFileToUser(ByVal Path As String, ByVal FileName As String)
  Response.HeaderEncoding = Text.UnicodeEncoding.Default
  Response.AddHeader("Content-Disposition", "attachment; filename=" & FileName)
  Response.ContentType = "application/octet-stream"
  Response.Clear()
  Response.Cache.SetCacheability(HttpCacheability.Public)
  Response.BufferOutput = False
  Try
  Response.WriteFile(Path)
  FileIO.FileSystem.DeleteFile(Path)
  Catch ex As Exception
  Throw ex
  End Try
  End Sub
#End Region
#Region "Обработка событий кнопок"
  Protected Sub bttnSendToWord_Click(ByVal sender As Object, ByVal e As 
 System.EventArgs) Handles bttnSendToWord.Click
  Dim WordObj As Word.Application = CreateWordObj() 'Создаем экземпляр 
Word
  Dim WordDoc As Word.Document = OpenWordFile("c:\1.doc", WordObj) 
'Получаем экземпляр открытого документа
  Dim WordFileTmp As String = WordDoc.FullName 'Получаем полный путь к 
временному документу
  WordDoc.Range.Text = TextBox1.Text 'Заносим текст из textbox1 в 
открытый документ
  WordDoc.Save() 'Сохраняем измененный документ 
  WordDoc.Close() 'Закрываем документ
  WordObj.Quit() 'Выходим из приложения 
  WordDoc = Nothing 'Уничтожаем ссылку на экземпляр документа
  WordObj = Nothing 'Уничтожаем ссылку на экземпляр Word
  SendFileToUser(WordFileTmp, "WordDocument.doc") 'Отправляем пользователю 
данный файл
  End Sub

  Protected Sub SendToExcel_Click(ByVal sender As Object, ByVal e As 
 System.EventArgs) Handles SendToExcel.Click
  Dim ExcelObj As Excel.Application = CreateExcelObj() 'Создаем 
экземпляр Excel
  Dim ExcelBook As Excel.Workbook = OpenExcelFile("c:\1.xls", ExcelObj) 
'Получаем экземпляр открытой книге
  Dim ExcelFileTmp As String = ExcelBook.FullName 'Получаем полный путь 
к временной книге
  ExcelBook.ActiveSheet.Cells(1, 1) = TextBox1.Text 'Заносим текст из 
textbox1 в ячейку(1,1) активного листа книги
  ExcelBook.Save() 'Сохраняем измененную книгу
  ExcelBook.Close() 'Закрываем книгу
  ExcelObj.Quit() 'Выходим из приложения 
  ExcelBook = Nothing 'Уничтожаем ссылку на экземпляр книги
  ExcelObj = Nothing 'Уничтожаем ссылку на экземпляр Excel
  SendFileToUser(ExcelFileTmp, "ExcelSheet.xls") 'Отправляем 
пользователю данный файл
  End Sub
#End Region
End Class


Листинг 2 Код класса «обработчик событий» веб-формы

 

После этих действий необходимо создать шаблоны документов, на основании которых будут генерироваться результирующие документы. 

Если нужно построить документы сложной формы, например насыщенные элементами формы Excel, то есть два способа их создания:
Создавать элементы формы непосредственно в коде прикладной программы (например, присваивать границы ячейкам, задавать шрифты и т.д.) 

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

Такой же подход применим и к построению документов в формате Word.

В вышеприведенном примере показано использование тестовых шаблонов TestWord.doc и TestExcel.xls.

 


Категория: .NET | Добавил: virusik (03.07.2009)
Просмотров: 7694 | Комментарии: 33 | Рейтинг: 0.0/0 |
Всего комментариев: 171 2 »
17 порекомендуйте нормального юриста  
0
у кого есть проверенный хороший адвокат знакомый скиньте контакты по наследственным вопросам?

16 spermotottate  
0
http://sportforgame.ru - .

15 spermotottate  
0
Excuse for that I interfere … I understand this question. I invite to discussion.http://dachniyotvet.ru - .

14 Danila6093  
0
на этом интернет-ресурсе собран огромный выбор интересных статей про http://medbaz.com/pages-more-1401.html - препараты для сердца.

13 Kirila7567  
0
на веб-блоге собран огромный ассортимент умных статей про http://ublaze.ru/forum/ftopic1072.html - триколор личный кабинет регистрация

12 spermotottate  
0
It is remarkable, this amusing messagehttp://superflytravel.ru - .

11 Oukrxazev  
0
пардон за неотвязность. встарь находил вменяемое рассказ вкладов, их динамики. Для тех кто такой не раскусывает, это не так просто-напросто. На просторах интернета несть чего есть. Но вменяемой извещении о вкладах не так бог не обидел.
Ниже ссылка на заметку. сможет кому-то из вас пригодится.

Если не туда разместил пост переместите пожалуйста. Благодарю.
http://exchangeandwe.ru/ - Лишь у нас вы выберете банковские вклады кои посодействуют вам и вашим деньгам

10 avtoexperts  
0
Для того чтобы получить ответы на интересующие вопросы зайдите на наш сайт http://expert-mo.com/

независимая автоэкспертиза менделеево
независимая оценка дмитров
оценка авто щелково
независимая автоэкспертиза ржавки
оценочная компания ногинск
оценщик поведники
независимая экспертиза автомобилей одинцово
авто экспертиза любучаны
независимая экспертиза автомобилей жуковский
независимая оценка обухово

9 Zumrraaey  
0
Долгое время не брал кредиты. Копил и собирал)
Но как показывает практика время то уходит(
Кто брал кредиты в сбербанке?
Подскажите. У них еще действует правило о снижении процентной ставки для заемщика с хорошей кредитной историей?
Собираюсь взять сначала потребительский кредиты. А затем и ипотечный.

Вот нашел пару страниц по потребительскому кредиту.
http://rusbanksite.ru/potrebitelskie-kredity-sberbanka-bazovye-programmy/
http://rusbanksite.ru/bystrokredit-ot-banka-moskvy-kak-poluchit-bystryj/

Но все равно не очень понял как выгодно взять кредиты.

P.S. Если написал не в тот раздел перенесите пожалуйста.

8 Fubrhawey  
0
Помогите советом. Пару дней назад решился подкупать в онлайн аптеке несколько препаратов. Чтобы себя правда и ради жены тоже.
Аптеку нашел сквозь этого сайт.
http://sdfg.freeiz.com/
Понравились цены и бонусы. Там можно покупать значительный обьем примерно даром.

Оплатил без проблем. Ныне жду если прийдет. жду и сомневаюсь. Боюсь что ошибся в чем-то.
А потому прошу совета. Который покупал после онлайн аптеки? Я сделал все правильно?

P.S. Господа модераторы. Извините когда написал не туда. Перенесите тему в нормальный раздел. Спасибо.

1-10 11-17
Имя *:
Email *:
Код *:
вход на сайт
Категории раздела
C/С++ [24]
статьи о языке C/С++
Visual FoxPro [1]
информация о языке Visual FoxPro
.NET [24]
статьи о языке программирования .NET
ваши статьи [4]
здесь вы можете размещать сваи статьи
модинг [4]
статьи о модинге ПК
Поиск по сайту
наши опросы
Оцените мой сайт
Всего ответов: 10
Мини-чат
помощь проекту
помоги проекту
ЯндексЯндекс. ДеньгиХочу такую же кнопку
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Каталог http://www.internetmir.ru Лучшие сайты интернета в каталоге Intenetmir
  • Delphi.int.ru - Сообщество программистов: общение, помощь, обмен опытом.
    реклама 88х31
    Каталог сайтов. Раскрутка. Хостинг. Каталог ссылок. Информационный портал - Старого.NET Шпоры, курсовые, пособия, рефераты, ВУЗы.
    Статистика
    webgari.com Рейтинг сайтов
    Раскрутка сайтов
    Яндекс цитирования
    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0