- Код: Выделить всё
<%@ LANGUAGE=VBScript %>
<%Option Explicit
Response.Expires = -100
Response.Buffer = true
Dim FileName, FilePath
Dim WordApp 'Word.Application
Dim WordDoc 'Word.Document
FileName = "report" & GetFormatedDate(Now) & ".doc"
FilePath = "tmp\" & FileName
On Error Resume Next
Set WordApp = Server.CreateObject("Word.Application")
WordApp.Visible = False
'Доп.вопрос: почему не катит Open, а только Add? Потому что DOT?
'Set WordDoc = WordApp.Documents.Open(Server.MapPath("report.doc"), False)
Set WordDoc = WordApp.Documents.Add(Server.MapPath("report.dot"), False)
'форматируем документ
'OrderFields(WordDoc)
'сохраняем документ во временный файл
WordDoc.SaveAs Server.MapPath(FilePath), 0 'wdFormatDocument
WordDoc.Close
Set WordDoc = Nothing
WordApp.Quit
Set WordApp = Nothing
On Error GoTo 0
'выводим данные в поток
FlushDoc FilePath, "application/ms-word"
Dim fso, file
Set fso = Server.CreateObject("Scripting.FileSystemObject")
'удаляем временный файл документа
'удаление закомментарено специально, чтобы видеть сколько файлов получилось
'fso.DeleteFile(Server.MapPath(FilePath))
Response.End
'Возвращает строку даты в формате yyyymmddhhnnss
'Функции Format() в VBScript нет
Function GetFormatedDate(ByVal dt)
GetFormatedDate = Year(dt)
GetFormatedDate = GetFormatedDate & Right("00" & Month(dt), 2)
GetFormatedDate = GetFormatedDate & Right("00" & Day(dt), 2)
GetFormatedDate = GetFormatedDate & Right("00" & Hour(dt), 2)
GetFormatedDate = GetFormatedDate & Right("00" & Minute(dt), 2)
GetFormatedDate = GetFormatedDate & Right("00" & Second(dt), 2)
End Function
'выводит содержимое документа в поток Response.Content
Sub FlushDoc(ByVal FilePath, ByVal ContentType)
Dim objStream 'ADODB.Stream
Dim FileName
FilePath = Replace(FilePath, "/", "\")
FileName = Mid(FilePath, InStrRev(FilePath, "\") + 1)
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = 1
objStream.Open
objStream.LoadFromFile Server.MapPath(FilePath)
Response.ContentType = ContentType
Response.AddHeader "content-length", objStream.Size
Response.AddHeader "content-disposition", "inline; filename=" & FileName
Response.BinaryWrite objStream.Read
Response.Flush
objStream.Close
Set objStream = Nothing
End Sub
%>
Теперь, если выполнить этот код один раз, то в папке tmp получим два файла. Чому так?