How to read workbook (not worksheet) properties with OLEDB

4

4everDad

I am attempting to read a workbook's properties such as Date1904.
Using brute force I discovered the flag in byte 765 of some .XLS
files, but I presume that the location is undocumented and unreliable
across all current and future versions of Excel. I need to verify
that 4 year offset (1462 days) but have no idea how to view workBOOK
properties with OLEDB which I already use to view worksheets.

I know I could open the Excel Workbook Object as an Application, but I
am running this on a web server and opening an instance of Excel isn't
scalable - it takes a couple seconds each time to open. Besides, I
don't have the latest Excel for the new 2007 file versions. Is there
another way to get the workbook properties using OLEDB such as the
flag for Date1904? Thanks!
 
4

4everDad

Roger, Thank you for replying. I am aware of that property (Date1904)
when I use Automation to open Excel as an Application object from
within a database language. I can do that easily in the Application
object. But I can't do that from the server since Excel is not
installed on the server. I need to do it in OLEDB if at all
possible. My problem is that while I can see and iterate the
worksheet values, I don't seem to know how to view the workbook or if
it is even possible from OLEDB. And my attempts to use
"ActiveWorkbook.Date1904" failed no matter which combination I used.

objCn = CreateObject("ADODB.Connection")
objRs = CreateObject("ADODB.Recordset")
objCn.ConnectionString = [Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=]+myXlsFile+[;Extended Properties='Excel 12.0;HDR=No;IMEX=1']

I guess the problem is that OLEDB is a bit of a black box and I don't
even know whether the methods or properties I need are there...
 
J

Jim Thomlinson

ADODB.Recordset is probably not going to work for you. It is basically a way
or reading a database. To the best of my knowledge it will not handle reading
file properties. You could look into an XL4 macro which will not require the
file to be open. That being said I do not know of any XL4 macros to do what
you ask...
--
HTH...

Jim Thomlinson


4everDad said:
Roger, Thank you for replying. I am aware of that property (Date1904)
when I use Automation to open Excel as an Application object from
within a database language. I can do that easily in the Application
object. But I can't do that from the server since Excel is not
installed on the server. I need to do it in OLEDB if at all
possible. My problem is that while I can see and iterate the
worksheet values, I don't seem to know how to view the workbook or if
it is even possible from OLEDB. And my attempts to use
"ActiveWorkbook.Date1904" failed no matter which combination I used.

objCn = CreateObject("ADODB.Connection")
objRs = CreateObject("ADODB.Recordset")
objCn.ConnectionString = [Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=]+myXlsFile+[;Extended Properties='Excel 12.0;HDR=No;IMEX=1']

I guess the problem is that OLEDB is a bit of a black box and I don't
even know whether the methods or properties I need are there...


ActiveWorkbook.Date1904

Returns True when set
--
Regards
Roger Govier

in message
 
4

4everDad

Yes, RecordSet reads the worksheets. I was hoping Connection (or
something else) in OLE DB would make that workbook property
accessible. Argh!


ADODB.Recordset is probably not going to work for you. It is basically a way
or reading a database. To the best of my knowledge it will not handle reading
file properties. You could look into an XL4 macro which will not require the
file to be open. That being said I do not know of any XL4 macros to do what
you ask...
--
HTH...

Jim Thomlinson

4everDad said:
Roger, Thank you for replying. I am aware of that property (Date1904)
when I use Automation to open Excel as an Application object from
within a database language. I can do that easily in the Application
object. But I can't do that from the server since Excel is not
installed on the server. I need to do it in OLEDB if at all
possible. My problem is that while I can see and iterate the
worksheet values, I don't seem to know how to view the workbook or if
it is even possible from OLEDB. And my attempts to use
"ActiveWorkbook.Date1904" failed no matter which combination I used.
objCn = CreateObject("ADODB.Connection")
objRs = CreateObject("ADODB.Recordset")
objCn.ConnectionString = [Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=]+myXlsFile+[;Extended Properties='Excel 12.0;HDR=No;IMEX=1']
I guess the problem is that OLEDB is a bit of a black box and I don't
even know whether the methods or properties I need are there...
 
4

4everDad

Thank you, Roger & Jim. If any one else can figure out how to use
OLEDB to access the workBOOK properties of an Excel file (and not just
the workSHEET data, see prior posts), please reply and I will be very
grateful.

Yes, RecordSet reads the worksheets. I was hoping Connection (or
something else) in OLE DB would make that workbook property
accessible. Argh!

ADODB.Recordset is probably not going to work for you. It is basically a way
or reading a database. To the best of my knowledge it will not handle reading
file properties. You could look into an XL4 macro which will not require the
file to be open. That being said I do not know of any XL4 macros to do what
you ask...
Jim Thomlinson
4everDad said:
Roger, Thank you for replying. I am aware of that property (Date1904)
when I use Automation to open Excel as an Application object from
within a database language. I can do that easily in the Application
object. But I can't do that from the server since Excel is not
installed on the server. I need to do it in OLEDB if at all
possible. My problem is that while I can see and iterate the
worksheet values, I don't seem to know how to view the workbook or if
it is even possible from OLEDB. And my attempts to use
"ActiveWorkbook.Date1904" failed no matter which combination I used.
objCn = CreateObject("ADODB.Connection")
objRs = CreateObject("ADODB.Recordset")
objCn.ConnectionString = [Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=]+myXlsFile+[;Extended Properties='Excel 12.0;HDR=No;IMEX=1']
I guess the problem is that OLEDB is a bit of a black box and I don't
even know whether the methods or properties I need are there...
On Mar 2, 6:41 am, "Roger Govier" <roger@technology4unospamdotcodotuk>
wrote:
ActiveWorkbook.Date1904
Returns True when set
--
Regards
Roger Govier
in message
I am attempting to read a workbook's properties such as Date1904.
Using brute force I discovered the flag in byte 765 of some .XLS
files, but I presume that the location is undocumented and unreliable
across all current and future versions of Excel. I need to verify
that 4 year offset (1462 days) but have no idea how to view workBOOK
properties with OLEDB which I already use to view worksheets.
I know I could open the Excel Workbook Object as an Application, but I
am running this on a web server and opening an instance of Excel isn't
scalable - it takes a couple seconds each time to open. Besides, I
don't have the latest Excel for the new 2007 file versions. Is there
another way to get the workbook properties using OLEDB such as the
flag for Date1904? Thanks!
 
4

4everDad

Thank you, Roger & Jim. If any one else can figure out how to use
OLEDB to access the workBOOK properties of an Excel file (and not just
the workSHEET data, see prior posts), please reply and I will be very
grateful.

Yes, RecordSet reads the worksheets. I was hoping Connection (or
something else) in OLE DB would make that workbook property
accessible. Argh!

ADODB.Recordset is probably not going to work for you. It is basically a way
or reading a database. To the best of my knowledge it will not handle reading
file properties. You could look into an XL4 macro which will not require the
file to be open. That being said I do not know of any XL4 macros to do what
you ask...
Jim Thomlinson
4everDad said:
Roger, Thank you for replying. I am aware of that property (Date1904)
when I use Automation to open Excel as an Application object from
within a database language. I can do that easily in the Application
object. But I can't do that from the server since Excel is not
installed on the server. I need to do it in OLEDB if at all
possible. My problem is that while I can see and iterate the
worksheet values, I don't seem to know how to view the workbook or if
it is even possible from OLEDB. And my attempts to use
"ActiveWorkbook.Date1904" failed no matter which combination I used.
objCn = CreateObject("ADODB.Connection")
objRs = CreateObject("ADODB.Recordset")
objCn.ConnectionString = [Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=]+myXlsFile+[;Extended Properties='Excel 12.0;HDR=No;IMEX=1']
I guess the problem is that OLEDB is a bit of a black box and I don't
even know whether the methods or properties I need are there...
On Mar 2, 6:41 am, "Roger Govier" <roger@technology4unospamdotcodotuk>
wrote:
ActiveWorkbook.Date1904
Returns True when set
--
Regards
Roger Govier
in message
I am attempting to read a workbook's properties such as Date1904.
Using brute force I discovered the flag in byte 765 of some .XLS
files, but I presume that the location is undocumented and unreliable
across all current and future versions of Excel. I need to verify
that 4 year offset (1462 days) but have no idea how to view workBOOK
properties with OLEDB which I already use to view worksheets.
I know I could open the Excel Workbook Object as an Application, but I
am running this on a web server and opening an instance of Excel isn't
scalable - it takes a couple seconds each time to open. Besides, I
don't have the latest Excel for the new 2007 file versions. Is there
another way to get the workbook properties using OLEDB such as the
flag for Date1904? Thanks!
 
B

Bob Barrows [MVP]

4everDad said:
Thank you, Roger & Jim. If any one else can figure out how to use
OLEDB to access the workBOOK properties of an Excel file (and not just
the workSHEET data, see prior posts), please reply and I will be very
grateful.

Don't hold your breath :)
Your only hope is to find this property in the dynamic properties
supplied by the OLE DB provider. Loop through them and inspect the
property names and values:

for each p in cn.properties
msgbox p.name 'or print it somewhere
msgbox p.value 'or print it somewhere
next

You might also look in the recordset's Properties collection.
If you find the property you need, more power to you. If not, find
another solution: you've confirmed that this property is not exposed to
OLE DB. Perhaps use an Excel macro to store the propety value as data in
your spreadsheet.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top