Everytime I see some code that has to work with data in Excel files it always uses OLE automation. The worst case of this is on servers to process uploaded files, Microsoft doesn’t support Office on backend servers. I think a much better method is to use the OLEDB JET database providers, whether it’s for Domino, ASP, ASP.NET or anything else for that matter.
There’s no need to install Office at all, if your using Windows 2008 Server 64 bit you will need to install a download from Microsoft to get the ADODB dlls. This method is supported in all versions of Excel including 2007, but this uses the ACE Provider instead of JET.
Anyway, here’s some code written in LotusScript to demonstrate Create, Read and Update of Excel data. Unfortunately Delete is not supported.
The following code is used to read a XLS file. It will only read the first Worksheet, but you could read through all of them.
There’s no need to install Office at all, if your using Windows 2008 Server 64 bit you will need to install a download from Microsoft to get the ADODB dlls. This method is supported in all versions of Excel including 2007, but this uses the ACE Provider instead of JET.
Anyway, here’s some code written in LotusScript to demonstrate Create, Read and Update of Excel data. Unfortunately Delete is not supported.
The following code is used to read a XLS file. It will only read the first Worksheet, but you could read through all of them.
On Error Goto processError Const filename = "c:\users\ian\my documents\writexls.xls" Const adSchemaTables = 20 Dim adodbConnection As Variant Dim connectionString As String Dim adodbRecordSet As Variant Dim worksheet As String connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ filename & ";Extended Properties=""Excel 8.0;HDR=Yes;""" Set adodbConnection = CreateObject("adodb.connection") adodbConnection.Open(connectionString) Set adodbRecordSet = adodbConnection.OpenSchema(adSchemaTables) worksheet = adodbRecordSet.Fields("table_name").Value adodbRecordSet.Close adodbRecordSet.Open "SELECT * FROM " + worksheet, adodbConnection While Not adodbRecordSet.EOF For i = 0 To (adodbRecordSet.Fields.Count - 1) Msgbox adodbRecordSet.Fields(i).Value Next adodbRecordSet.MoveNext Wend adodbRecordSet.Close adodbConnection.Close finally: Set adodbConnection = Nothing Set adodbCommand = Nothing Exit Sub processError: Print "Error: " & Error & ": " + Error$ + " on line " & Erl Goto finally
Now, here’s the code to create, insert and update data in the file:
On Error Goto processError Const filename = "c:\users\ian\my documents\writexls.xls" Dim adodbConnection As Variant Dim connectionString As String Dim adodbCommand As Variant Kill filename connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ filename & ";Extended Properties=""Excel 8.0;HDR=Yes;""" Set adodbConnection = CreateObject("adodb.connection") adodbConnection.Open(connectionString) Set adodbCommand = CreateObject("adodb.command") Set adodbCommand.ActiveConnection = adodbConnection adodbCommand.CommandText = "CREATE TABLE [Contacts] ([Id] number, [Name] string)" adodbCommand.Execute adodbCommand.CommandText = "INSERT INTO [Contacts] ([Id], [Name]) VALUES ('1', 'Ian')" adodbCommand.Execute adodbCommand.CommandText = "INSERT INTO [Contacts] ([Id], [Name]) VALUES ('2', 'Tom')" adodbCommand.Execute adodbCommand.CommandText = "UPDATE [Contacts] SET [Name] = 'Paul' WHERE [Id] = 1" adodbCommand.Execute adodbConnection.Close finally: Set adodbConnection = Nothing Set adodbCommand = Nothing Exit Sub processError: Print "Error: " & Error & ": " + Error$ + " on line " & Erl Goto finally
0 comments:
Post a Comment