Исходники.Ру - Программирование
Исходники
Статьи
Книги и учебники
Скрипты
Новости RSS
Магазин программиста

Главная » Статьи по программированию » .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, то есть два способа их создания:

  1. Создавать элементы формы непосредственно в коде прикладной программы (например, присваивать границы ячейкам, задавать шрифты и т.д.)

     

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

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

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

 

Автор выражает за неоценимую помощь благодарность Туманову Анатолию Александровичу.


Может пригодится:


Автор: C...R...a...S...H]
Прочитано: 6748
Рейтинг:
Оценить: 1 2 3 4 5

Комментарии: (0)

Добавить комментарий
Ваше имя*:
Ваш email:
URL Вашего сайта:
Ваш комментарий*:
Код безопастности*:

Рассылка новостей
Рейтинги
© 2007, Программирование Исходники.Ру