Имя: Пароль:
1C
1С v8
v8: Чтение файла Excel Xml через ADODB
0 D_E_S2
 
28.08.11
19:54
Пытаюсь прочитать данные из файла Xml, который был сохранен из Excel (не знаю уж кому понадобилось сохранять таблицу в этом формате).
Использую строку соединения:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\temp\nf.xml;Extended Properties="Excel 12.0;HDR=YES;IMEX=1;"

Метод Open() выдает ошибку "...Внешняя таблица не имеет предполагаемый формат.". Пробовал также через "Microsoft.Jet.OLEDB.4.0" и "Excel 8.0" - результат аналогичный.

Если файл открыт в приложении в момент чтения или пересохранен в формате "xls", то данные считываются нормально.
Возможно ли как-то побороть это или через ADODB можно прочитать не все что было сохранено в Excel?
1 Живой Ископаемый
 
28.08.11
20:06
стоп, АДОДБ не имеет отношения к приложению... Объясню на примере.. Ексель может вполне себе сохранить в формат CSV - комма сепарэйтед чего-то там.. Но когда мы через АДОДБ пытаемся подключится к такому файлу - мы ничего не говорим про Ексель

strConnection = "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
"Dbq=" & Server.MapPath(".\csv\") & ";"Extensions=asc,csv,tab,txt;Persist Security Info=False"

мы указываем драйвер, который к Екселю не имеет прямого отношения. Ексель сам им пользуется...
Так вот в случае с ХМЛ я вовсе не уверен что существует драйвер:
http://www.connectionstrings.com/
2 Живой Ископаемый
 
28.08.11
20:10
но хотя... вы собственно тут Ексель указываете только в Екстендет пропертиз... Ну.. нужно читать документацию к конкретным драйверам, которые вы пытаетесь использовать: ACE, Jet, Excell... но в общем, все равно нет...
в конце концов, если это для вас одноразовая акция - перегоните имеющийся хмл в тот формат, с которым вам удобнее всего работать, и читайте уже из него
3 D_E_S2
 
28.08.11
20:10
"...не уверен что существует драйвер"
Я 2 часа времени убил именно из-за того, что Excel в итоге открывает этот файл (хоть и с преобразованием) и, как-то же, сохраняет в нем. :(
4 Живой Ископаемый
 
28.08.11
20:11
2(3) это может быть его собственная функция...
5 Живой Ископаемый
 
28.08.11
20:12
То есть например через ОЛЕ вы с помощью екселя сможете прочитать это файл, а с помощью ОЛЕДБ - нет
6 D_E_S2
 
28.08.11
20:14
Мда... Получается или через OLE "перегонять" в формат XLSX, или "забить"...
7 Живой Ископаемый
 
28.08.11
20:15
угу
8 Живой Ископаемый
 
28.08.11
20:16
Ну или читать непосредственно как ХМЛ через ЧтениеХМЛ или другие спец.объекты для чтения ХМЛ
9 izekia
 
28.08.11
20:16
а почему бы просто не вытянуть необходимые данные из хмл?
зачем нужно дергать ексель или адо?
10 D_E_S2
 
28.08.11
20:21
Это Excel такой потому-что...
11 D_E_S2
 
28.08.11
20:21
а не обычный XML
12 Живой Ископаемый
 
28.08.11
20:22
непонятно... пару первых строчек можно?
13 izekia
 
28.08.11
20:25
(10) там обычный хмл + стили различные из екселя и тп ...
данные легко вытягиваются если с XQuery знаком
14 D_E_S2
 
28.08.11
20:26
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
 <Author>Unknown</Author>
 <LastAuthor>Денис</LastAuthor>
 <Created>2008-06-01T17:32:12Z</Created>
 <LastSaved>2008-06-01T17:43:06Z</LastSaved>
 <Version>14.00</Version>
</DocumentProperties>
<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
 <AllowPNG/>
</OfficeDocumentSettings>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
 <WindowHeight>9690</WindowHeight>
 <WindowWidth>19320</WindowWidth>
 <WindowTopX>360</WindowTopX>
 <WindowTopY>30</WindowTopY>
 <RefModeR1C1/>
 <ProtectStructure>False</ProtectStructure>
 <ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>

...и далее данные

<Worksheet ss:Name="Лист1">
 <Names>
  <NamedRange ss:Name="_FilterDatabase" ss:RefersTo="=Лист1!R2C1:R101C24"
   ss:Hidden="1"/>
 </Names>
 <Table ss:ExpandedColumnCount="52" ss:ExpandedRowCount="101" x:FullColumns="1"
  x:FullRows="1" ss:StyleID="s63" ss:DefaultRowHeight="15">
  <Column ss:StyleID="s63" ss:Width="143.25"/>
  <Column ss:StyleID="s63" ss:AutoFitWidth="0" ss:Width="90" ss:Span="1"/>
  <Column ss:Index="4" ss:StyleID="s63" ss:AutoFitWidth="0" ss:Width="171"/>
  <Column ss:StyleID="s63" ss:AutoFitWidth="0" ss:Width="65.25" ss:Span="1"/>
  <Column ss:Index="7" ss:StyleID="s63" ss:AutoFitWidth="0" ss:Width="58.5"/>
  <Column ss:StyleID="s63" ss:AutoFitWidth="0" ss:Width="57"/>
  <Column ss:StyleID="s63" ss:AutoFitWidth="0" ss:Width="63"/>
  <Column ss:StyleID="s63" ss:Width="60.75"/>
  <Column ss:StyleID="s63" ss:AutoFitWidth="0" ss:Width="66"/>
  <Column ss:StyleID="s63" ss:AutoFitWidth="0" ss:Width="62.25"/>
  <Column ss:StyleID="s63" ss:AutoFitWidth="0" ss:Width="77.25" ss:Span="1"/>
  <Column ss:Index="15" ss:StyleID="s63" ss:AutoFitWidth="0" ss:Width="90"
   ss:Span="1"/>

Эту фигню разбирать еще нуднее чем пересохранить файл в нормальном формате. :)
15 Живой Ископаемый
 
28.08.11
20:27
а...
16 izekia
 
28.08.11
20:29
(14) там описание стилей отдельно от данных, вытягивается все легко, если голову задействовать
17 D_E_S2
 
28.08.11
20:33
Да пересохранить файл в нужный формат тоже не особо сложно (и читать уже данные из него), но хотелось бы без лишних изворотов обойтись. Видимо не получится...
18 izekia
 
28.08.11
20:43
вот здесь все данные:
  <Row>
   <Cell><Data ss:Type="Number">1</Data></Cell>
   <Cell><Data ss:Type="String">ser</Data></Cell>
   <Cell ss:StyleID="s62"><Data ss:Type="DateTime">2011-02-19T00:00:00.000</Data></Cell>
  </Row>
  <Row>
   <Cell><Data ss:Type="Number">2</Data></Cell>
   <Cell><Data ss:Type="Number">4</Data></Cell>
  </Row>
  <Row>
   <Cell ss:Index="2"><Data ss:Type="Number">433</Data></Cell>
   <Cell><Data ss:Type="String">dfr4</Data></Cell>
  </Row>
19 andrewks
 
28.08.11
20:56
(18) ну и начинай выбирать в xml ноды "Row", в чём проблема?
20 izekia
 
28.08.11
20:58
(19) большое, блин, спасибо ... а я-то сижу думаю чем бы мне заняться)
21 andrewks
 
28.08.11
21:00
(20) чего язвишь? тебе же только данные надо вытянуть, без всяких там оформлений, стилей, и прочего? правильно я понял?
22 izekia
 
28.08.11
21:05
(21) не поверишь ... мне это нафиг не надо)
23 andrewks
 
28.08.11
21:07
(22) ы-ы-ы, попутал )))
24 andrewks
 
28.08.11
21:09
(22) ты откуда этот кусок выложил? я поэтому и подумал, что это ТС
25 izekia
 
28.08.11
21:15
(24) ну сам записал в этом формате, чтобы наглядно показать, что данные легко вытянуть