As long as you have 255 fields or fewer, try the following:
a. use a .odc file to connect to the data
b. use a SCHEMA.INI file to specify the delimiter, and if necessary the
column names
c. don't use a header source, just a data source
For example, suppose you want to connect to c:\myfiles\mydata.txt.
Then you need a .odc file (Office Data Connection
File) as follows (this has a lot of stuff which you do not absolutely need
but which Office inserts when you create it):
-----------------------------------------------------------------
<html xmlns
="urn:schemas-microsoft-com
ffice
ffice"
xmlns="
http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/x-ms-odc; charset=utf-8">
<meta name=ProgId content=ODC.Table>
<meta name=SourceType content=OLEDB>
<meta name=Table content="mydata#txt">
<title>mydata#txt</title>
<xml id=docprops><o
ocumentProperties
xmlns
="urn:schemas-microsoft-com
ffice
ffice"
xmlns="
http://www.w3.org/TR/REC-html40">
<o:Name>mydata#txt</o:Name>
</o
ocumentProperties>
</xml><xml id=msodc><odc:OfficeDataConnection
xmlns
dc="urn:schemas-microsoft-com
ffice
dc"
xmlns="
http://www.w3.org/TR/REC-html40">
<odc:Connection odc:Type="OLEDB">
<odc:ConnectionString>Provider=Microsoft.ACE.OLEDB.12.0;User
ID=Admin;Data Source=c:\myfiles\;Mode=Share Deny None;Extended
Properties="";Jet OLEDB:System database="";Jet
OLEDB:Registry Path="";Jet OLEDB:Engine Type=96;Jet OLEDB
atabase
Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk
Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create
System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB
on't Copy
Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet
OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False</odc:ConnectionString>
<odc:CommandType>Table</odc:CommandType>
<odc:CommandText>mydata#txt</odc:CommandText>
</odc:Connection>
</odc:OfficeDataConnection>
</xml>
<style>
<!--
.ODCDataSource
{
behavior: url(dataconn.htc);
}
-->
</style>
</head>
<body onload='init()' scroll=no leftmargin=0 topmargin=0 rightmargin=0
style='border: 0px'>
<table style='border: solid 1px threedface; height: 100%; width: 100%'
cellpadding=0 cellspacing=0 width='100%'>
<tr>
<td id=tdName style='font-family:arial; font-size:medium; padding: 3px;
background-color: threedface'>
</td>
<td id=tdTableDropdown style='padding: 3px; background-color:
threedface; vertical-align: top; padding-bottom: 3px'>
</td>
</tr>
<tr>
<td id=tdDesc colspan='2' style='border-bottom: 1px threedshadow solid;
font-family: Arial; font-size: 1pt; padding: 2px; background-color:
threedface'>
</td>
</tr>
<tr>
<td colspan='2' style='height: 100%; padding-bottom: 4px; border-top:
1px threedhighlight solid;'>
<div id='pt' style='height: 100%' class='ODCDataSource'></div>
</td>
</tr>
</table>
<script language='javascript'>
function init() {
var sName, sDescription;
var i, j;
try {
sName = unescape(location.href)
i = sName.lastIndexOf(".")
if (i>=0) { sName = sName.substring(1, i); }
i = sName.lastIndexOf("/")
if (i>=0) { sName = sName.substring(i+1, sName.length); }
document.title = sName;
document.getElementById("tdName").innerText = sName;
sDescription = document.getElementById("docprops").innerHTML;
i = sDescription.indexOf("escription>")
if (i>=0) { j = sDescription.indexOf("escription>", i + 11); }
if (i>=0 && j >= 0) {
j = sDescription.lastIndexOf("</", j);
if (j>=0) {
sDescription = sDescription.substring(i+11, j);
if (sDescription != "") {
document.getElementById("tdDesc").style.fontSize="x-small";
document.getElementById("tdDesc").innerHTML = sDescription;
}
}
}
}
catch(e) {
}
}
</script>
</body>
</html>
-----------------------------------------------------------------
You need one of those for each data source. You will need to change the path
name in the connection string to be the name of the folder containing the
text file you want to use, and change the file name in the various places it
occurs (Actually, I suspect it would be enough to change it in the line that
says "<meta name=Table content="mydata#txt">". Notice that "#" is used
instead of "." in this type of .odc file - I don't know if that is entirely
necessary. If you copy the DATACONN.HTC file from your My Data Sources
folder to the same folder as the .odc and try to open the .odc in Internet
Explorer, with any luck you wil see the text file content. That's not
essential for your task, but a useful technique when debugging .odc files.
To specify the character encoding of the text file, you need a SCHEMA.INI
file in the same folder as the text file. The SCHEMA.INI file is a text file
that you can edit with Notepad. has one "section" for each file you want to
describe. For a comma-delimited file with a header record try
[mydata.txt]
ColNameHeader=True
Format=Delimited(,)
MaxScanRows=25
If you need to use a different delimiter character use it instead of the ","
If you need to use a different character encoding, you can specify many
different encoding using another line, e.g. the following one is for Unicode
UTF-8:
CharacterSet=65001
If you want to put the column names in the SCHEMA.INI file rather than the
data source, you can do so by using
ColNameHeader=False
and adding lines such as
Col1=nameofcolumn1
Col2=nameofcolumn2
and so on, e.g. you might have
Col1=firstname
Col2=lastname
If you want to specify the data type of the column, you can do so to an
extent, e.g. for text columns use
Col1=firstname text
Col2=lastname text
As background, there are three methods you can use when connecting to a text
file as a data source-
a. Word's text converter (which pops up a dialog asking for field and
record delimiters)
b. the ODBC text driver (which relies on SCHEMA.INI to tell you the field
delimiter, but only really understands "CRLF" type record delimiters)
c. the OLE DB text provider (which behaves differently depnding on whther
you try to connect directly to the text file or use a .odc as an
intermediary - when you connect directly, it ignores any SCHEMA.INI and
prompts for the field delimiter, offering, tab, comma, and "other". When you
connect via .odc, the SCHEMA.INI is honoured and you avoid the dialog)
Word 2000 and earlier would use either (a) or (b) depending on
circumstances. Neither could cope with some encodings such as Unicode. (a)
is the only one that allows more than 255 fields.
Word 2002 and 2003 use (c) by default, then fall back to (a) if the
connection fails. "Header Source" is stil there but as you have found
doesn't really help. Further, as far as I know, only method (a) is used to
open a Header Source.
I've been researching this for a web page but there are a few remaining
unknowns to sort out first.
Peter Jamieson