SQL Sever 2005を使用してExcelファイルでシート名を取得する方法は?SQL ServerでExcelシート名を取得
ことに注意してください:
- は何のフロントエンド(Cの#、VB、PHPなど)がありません。
- SQL Server 2005だけを使用してシート名を取得しようとしています。
ありがとうございます。
SQL Sever 2005を使用してExcelファイルでシート名を取得する方法は?SQL ServerでExcelシート名を取得
ことに注意してください:
ありがとうございます。
できません。 Excelからデータを読み取るには2つのルートがあります。 1つはCOM/OLE automationルートで、ワークブック内のワークシートを列挙できます。それはTSQLがしない手続き型言語を必要とします。私は、あなたがBCLリストに載っていないので、あなたがミックスにCLRメソッドを許可すれば、あなたはOfficeライブラリにアクセスすることができると思います。
第2のルートは、この場合にはオープンクエリを介してJet driverを使用することですが、セットアップの一部として、アクセスするファイルとワークシートを明示的に定義する必要があります。あなたはワークシート名の記載を忘れることができますが、それでもExcelはワークシートに関するメタデータを私の占いの中で公開しません。
誰かが別の方法を知っているにもかかわらず、この問題をさまざまな方法でスライスしていたら、私は前述の2つのアプローチのいずれかに沸かない答えを出していません。
これには少なくとも2つの可能性があります。 SQL Server 2005でこれを確認する簡単な方法はありませんが、今は2008年だけです。
:リンクサーバーを作成し、sp_tables_ex
および/またはsp_columns_ex
を使用します。
-- Get table (worksheet) or column (field) listings from an excel spreadsheet
-- SET THESE!
declare @linkedServerName sysname = 'TempExcelSpreadsheet'
declare @excelFileUrl nvarchar(1000) = 'c:\MySpreadsheet.xls'
-- /SET
-- Remove existing linked server (if necessary)
if exists(select null from sys.servers where name = @linkedServerName) begin
exec sp_dropserver @server = @linkedServerName, @droplogins = 'droplogins'
end
-- Add the linked server
-- ACE 12.0 seems to work for both xsl and xslx, though some might prefer the older JET provider
exec sp_addlinkedserver
@server = @linkedServerName,
@srvproduct = 'ACE 12.0',
@provider = 'Microsoft.ACE.OLEDB.12.0',
@datasrc = @excelFileUrl,
@provstr = 'Excel 12.0;HDR=Yes'
-- Grab the current user to use as a remote login
declare @suser_sname nvarchar(256) = suser_sname()
-- Add the current user as a login
exec sp_addlinkedsrvlogin
@rmtsrvname = @linkedServerName,
@useself = 'false',
@locallogin = @suser_sname,
@rmtuser = null,
@rmtpassword = null
-- Return the table/column info
exec sp_tables_ex @linkedServerName
exec sp_columns_ex @linkedServerName
-- Remove temp linked server
if exists(select null from sys.servers where name = @linkedServerName) begin
exec sp_dropserver @server = @linkedServerName, @droplogins = 'droplogins'
end
私はこのhereのためのインスピレーションを発見しました。
:概説したようにOle Automation Proceduresを使用してください。here。私は自分自身でこれを試していない。
CLRメソッドを検討しています...まだいくつかの調査と研究を行う必要があります。ありがとう。 – Temp
@billinkc、これは明らかに古くなっていますが、私は1つまたは2つの方法に遭遇した可能性があります。 –