2010-12-06 12 views
0

既に作成されているExcelシートの書式を別のExcelシートにコピーすることを試みました。前者はテンプレートとしての役割を果たす。ストアドプロシージャは、新しいExcelシートにSQLクエリの結果セットを設定します。SQL Server 2005からSQL Server 2005へのクエリの結果セットをMS Excelにインポート

Insert ExcelSource...[ExcelTable$] (A,B,C) select convert(varchar(200),USER_ID), FIRST_NAME, 
Convert (varchar(20),CREATEDTIME) 
from SERV..AaUser 
OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "ExcelSource" returned message "Cannot start your application. The workgroup information file is missing or opened exclusively by another user.". 
Msg 7399, Level 16, State 1, Line 1 
The OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "ExcelSource" reported an error. Authentication failed. 
Msg 7303, Level 16, State 1, Line 1 
Cannot initialize the data source object of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "ExcelSource". 

ストアドプロシージャの構文は次のとおりです:あなたの聴衆と予想助けを

Create proc sp_write2Excel (@fileName varchar(100), 

            @NumOfColumns tinyint, 

            @query  varchar(200)) 

as 

begin 

     declare @dosStmt varchar(200) 

     declare @tsqlStmt varchar(500) 

     declare @colList varchar(200) 

     declare @charInd tinyint 



     set nocount on 



     -- construct the columnList A,B,C ... 

     -- until Num Of columns is reached. 



     set @charInd=0 

     set @colList = 'A' 

     while @charInd < @NumOfColumns - 1 

     begin 

      set @charInd = @charInd + 1 

      set @colList = @colList + ',' + char(65 + @charInd) 

     end 



     -- Create an Empty Excel file as the target file name by copying the template Empty excel File 

     set @dosStmt = ' copy C:\emp\empty.xls ' + @fileName 

     exec master..xp_cmdshell @dosStmt 



     -- Create a "temporary" linked server to that file in order to "Export" Data 

     EXEC sp_addlinkedserver 'ExcelSource', 

     'Jet 4.0', 

     'Microsoft.Jet.OLEDB.4.0', 

     @fileName, 

     NULL, 

     'Excel 5.0' 



     -- construct a T-SQL statement that will actually export the query results 

     -- to the Table in the target linked server 

     set @tsqlStmt = 'Insert ExcelSource...[ExcelTable$] ' + ' (' + @colList + ') '+ @query 



     print @tsqlStmt 



     -- execute dynamically the TSQL statement 

     exec (@tsqlStmt) 



     -- drop the linked server 

     EXEC sp_dropserver 'ExcelSource' 

     set nocount off 

end 

感謝

実行すると、次のエラーが発生します。

乾杯、 Tunde

答えて

0

Excelは、SQL Serverインスタンスと同じマシン上にインストールされていますか? JETドライバのOfficeが不足している可能性があります。

編集:

私はポストを読み違えると思う - ファイルが既に開かれているように聞こえます。 Excelファイルは一度に1人のユーザーだけが開くことができ、SQL Serverはこのファイルに排他的にアクセスする必要があります。 LockHunterを使用すると、ファイルの結びつきを判断するのに役立ちます。

+0

はい両方が同じマシンにインストールされています。ありがとう、私はSQl sERVERとマシンの管理者にsaとしてログインしています。 – Tunde

関連する問題