1. 버젼에 맞게 AccessDatabaseEngine.exe를 설치한다.
=> OS버젼이 64bit일 경우 AccessDatabaseEngine_X64.exe를 설치한다.
2. sp_configure를 이용하여 아래의 옵션을 활성화 한다.
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
3. 엑셀다운로드 할 쿼리를 프로시져로 만든다.
-- OLEDB.4.0은SQL2000 버젼임
CREATE PROC EXCEL
@Path VARCHAR(100)
AS
DECLARE @SQL NVARCHAR(4000)
SET @SQL = '
INSERT INTO
OPENDATASOURCE(''Microsoft.Jet.OLEDB.4.0'',''Data Source='+@Path+';Extended Properties=EXCEL 5.0'')...sheet1$
(goodscode, goodsname, unit, incost, salecost)
SELECT TOP 10 go_goodscode, go_goodsname, go_unit, gc_incost, gc_salecost
FROM Goods_TB
JOIN GoodsCost_TB ON gc_goodscode = go_goodscode
'
EXEC SP_EXECUTESQL @SQL
EXEC EXCEL 'D:\new\excelTest\goods.xls'
4. 원본엑셀파일을 만든후 원본을 가지고, 해당위치로 복사한다.
<%
fileCreate.asp
Set Fso = Server.CreateObject("Scripting.FileSystemObject")
File = "D:\new\excelTest\goods.xls"
If Fso.FileExists(File) then
Fso.DeleteFile File ' 기존파일삭제
End If
' 원본파일을 해당위치로 복사한다(왜, 엑셀은 DELETE이 안됨)
Fso.CopyFile "D:\goods.xls","D:\new\excelTest\goods.xls"
' 프로시져 실행
Set Rs = Conn.Execute("dbo.EXCEL")
' 엑셀다운받기
Response.redirect "fileDown.asp?strFileName=goods.xls"
%>
<%
fileDown.asp
‘ 문서정의타입을알수없음으로하게되면무조건다운로드시킨다.
‘ 다운로드시킬파일을정의한다.
Dim strFileName : strFileName = Request("strFileName")
Response.ContentType = "application/unknown"
Response.AddHeader "Content-Disposition","attachment; filename="&strFileName
‘ ADODB.Stream으로스트림을읽는다.
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1
objStream.LoadFromFile "D:\new\excelTest\"&strFileName
strFile = objStream.Read
Response.BinaryWrite strFile
Set objStream = Nothing
%>
'ASP' 카테고리의 다른 글
웹과 쿼리분석기의 성능이 다를때.. (0) | 2016.01.07 |
---|---|
asp에서 euc-kr / utf-8 설정 상단 구문 (0) | 2015.11.01 |
SQLInjection 방어하기 (0) | 2015.10.29 |
정규식을 이용한 HTML 태그제거 함수 (0) | 2015.03.19 |
CSRF 방어하기 (0) | 2014.01.05 |