Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Импорт из кривого Excel файла.  [new]
TimonSX
Member

Откуда:
Сообщений: 91
Есть ли еще способы импорта из Excel, не с помощью OLEDB.12.0/OLEDB.15.0 в MSSQL2012 x64?
Поставщик предоставил прайс в каком-то странном файле xlsx, который не получается прочесть не с помощью OLEDB или ssis(OLEDB или SSIS говорят, что это не поддерживаемый формат), но при этом эксель его открывает.
Можно как-то открыть их через COM или API соединение в MSSQL? или есть еще какие-нибудь варианты? (ну кроме как перед загрузкой пересохранять файл).
вот этот прайс: https://yadi.sk/d/_RPUf2Q4jB8dm
18 сен 15, 19:41    [18167757]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из кривого Excel файла.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
TimonSX
Поставщик предоставил прайс в каком-то странном файле xlsx
Да, занятно, такое впечатление, что файл побайтно формировали какой то своей прогой...
TimonSX
Можно как-то открыть их через COM или API соединение в MSSQL? или есть еще какие-нибудь варианты? (ну кроме как перед загрузкой пересохранять файл).
Ну как, только пробовать разные варианты, никто же вам не скажет, что сработает в случае нестандартного файла.
18 сен 15, 21:43    [18168298]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из кривого Excel файла.  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
TimonSX
Есть ли еще способы импорта из Excel, не с помощью OLEDB.12.0/OLEDB.15.0 в MSSQL2012 x64?
Поставщик предоставил прайс в каком-то странном файле xlsx, который не получается прочесть не с помощью OLEDB или ssis(OLEDB или SSIS говорят, что это не поддерживаемый формат), но при этом эксель его открывает.
Можно как-то открыть их через COM или API соединение в MSSQL? или есть еще какие-нибудь варианты? (ну кроме как перед загрузкой пересохранять файл).
вот этот прайс: https://yadi.sk/d/_RPUf2Q4jB8dm


не пойму, это вброс или серьезно?

самый обычный файл excel 2007, понимаемый даже wps office'ом. прочитать можно через ACE. или в excel сделайте save as... xls. а сам файл xlsx представляет собой zip-архив. в котором куча всего.

К сообщению приложен файл. Размер - 133Kb
18 сен 15, 21:52    [18168327]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из кривого Excel файла.  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Microsoft Access Database Engine 2010 Redistributable
Microsoft ACE OLEDB 12.0 connection strings
18 сен 15, 21:56    [18168335]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из кривого Excel файла.  [new]
o-o
Guest
churupaha,
офис-то открывает, а ACE пишет:
OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "External table is not in the expected format.".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

18 сен 15, 22:05    [18168378]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из кривого Excel файла.  [new]
o-o
Guest
пересохранение в старом 2003-ем формате рулит:

К сообщению приложен файл. Размер - 60Kb
18 сен 15, 22:12    [18168411]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из кривого Excel файла.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
churupaha
самый обычный файл excel 2007, понимаемый даже wps office'ом.
Необычный, там видно, что содержимое этого "куча всего" формировали как текстовые файлы самодельной прогой. Достаточно посмотреть на форматированные для "удобства визуального просмотра" xml-файлы. Ну и содержимое отличается, многих типичных папок нет, много лишних, нетипичных для msoffice файлов.

Оно, может, и соответствует стандартам openoffice, но вы знаете, как раньше IE воспринимал многие html документы, вроде бы соответствующие стандартам? :-)
18 сен 15, 22:48    [18168630]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из кривого Excel файла.  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
так у меня тогда тоже не читается офисом - вон числа одни. там внутри

SharedStrings.xml - словарь строк
worksheets\sheet1.xml - сама таблица ссылающаяся на порядковые номера узлов в словаре строк чтоли...
18 сен 15, 22:58    [18168697]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из кривого Excel файла.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
o-o
пересохранение в старом 2003-ем формате рулит:
Да пересохранение и в новом формате рулит.
Появляется папка docProps, файлы типа [Content_Types].xml и .rels переписываются в нормальные, ну и так далее.
И ТС говорит, что после пересохранения файл нормально читается...


churupaha
так у меня тогда тоже не читается офисом - вон числа одни. там внутри
Вот вот

churupaha
SharedStrings.xml - словарь строк
worksheets\sheet1.xml - сама таблица ссылающаяся на порядковые номера узлов в словаре строк чтоли...
Да, всё правильно.

Только эти эээ программисты назвали файл не "sharedStrings.xml", как надо, а "SharedStrings.xml", гыгы.

Думаю, в этом дело, xml - он же регистрозависимый.

Впрочем, там ещё отличий вагон, может и ещё что то, может, с ссылками где то ошиблись.
18 сен 15, 23:10    [18168756]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из кривого Excel файла.  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
alexeyvg
Только эти эээ программисты назвали файл не "sharedStrings.xml", как надо, а "SharedStrings.xml", гыгы.


100% в сделал переименование в файле xlsx

К сообщению приложен файл. Размер - 132Kb
18 сен 15, 23:22    [18168798]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из кривого Excel файла.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
churupaha
alexeyvg
Только эти эээ программисты назвали файл не "sharedStrings.xml", как надо, а "SharedStrings.xml", гыгы.


100% в сделал переименование в файле xlsx
Ага, я тоже нашёл ссылку на sharedStrings.xml в файле \xl\_rels\workbook.xml.rels
TimonSX
Поставщик предоставил прайс в каком-то странном файле xlsx
Нужно попытаться указать на ошибки в формате, возможно, они поправят.

Может, достаточно исправить одну эту ошибку, и файл откроется обычным провайдером, можете попробовать.
19 сен 15, 00:09    [18168947]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из кривого Excel файла.  [new]
TimonSX
Member

Откуда:
Сообщений: 91
Да с поставщику я писал, они сказали что кому-то передали ИМХО мертвое это дело...
А можно как-то программно пересохранить файл средствами TSQL?
19 сен 15, 09:11    [18169268]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из кривого Excel файла.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
TimonSX
Да с поставщику я писал, они сказали что кому-то передали ИМХО мертвое это дело...
Тут, видите, нашли конкретную багу, простую, и просто исправляемую.

Одно дело, когда вы пишите "не импортируется из MSSQL" - им неохота проверять с каким то MSSQL, импортом, долго и нудно искать ошибку, всё это поставят в планы на будущее...

А другое дело, когда вы пишите - вот она, конкретная ошибка, и вот альтернативные MS-у офисные пакеты на этой ошибке спотыкаются - это совсем другое дело. Поправить - 5 минут, почёта через край.
TimonSX
А можно как-то программно пересохранить файл средствами TSQL?
Пытаться пробовать работать с объектами экселя через COM, функциями sp_OACreate и т.д.

Но не уверен, получится ли такое...
19 сен 15, 10:09    [18169302]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из кривого Excel файла.  [new]
TimonSX
Member

Откуда:
Сообщений: 91
alexeyvg
Тут, видите, нашли конкретную багу, простую, и просто исправляемую.

Багу не нашли, при переименовании файлика OLEDB все равно не читает.
19 сен 15, 10:40    [18169329]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из кривого Excel файла.  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
хотел предложить так

exec xp_cmdshell N'ren c:\temp\file.xlsx file.zip'
exec xp_cmdshell N'7z rn c:\temp\file.zip xl\SharedStrings.xml xl\sharedStrings.xml'
exec xp_cmdshell N'ren c:\temp\file.zip file.xlsx'


но этого фикса достаточно только для WPS Office. видимо из-за того, что xlsx распаковывается во временную папку,
и потом идет попытка обратиться к файлу по sharedStrings.xml, а на файловой системе SharedStrings.xml, а ext4 файловая система - регистрозависимая. ACE OLEDB этого мало.

Попробовал распаковать пересохраненный и исходный в разные папки и сравнить их с помощью KDiff3. Оно слишком много выдало изменений, из-за переводов строк в исходном и их отсутствия в пересохраненном. Но если привести все к одному виду и сравнить, можно найти разницы. И потом исправлять это так: распаковал/исправил/запаковал/скормил ace oledb.
19 сен 15, 10:41    [18169330]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из кривого Excel файла.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
TimonSX
alexeyvg
Тут, видите, нашли конкретную багу, простую, и просто исправляемую.

Багу не нашли, при переименовании файлика OLEDB все равно не читает.
А, понятно. Ну, можно сохранить этот файл из экселя рядом, и сравнивать, искать различия, править, постоянно пытаясь открыть полученный файл OLEDB, может, найдёте ошибку.
churupaha
Но если привести все к одному виду и сравнить, можно найти разницы. И потом исправлять это так: распаковал/исправил/запаковал/скормил ace oledb.
+1

Или пусть разработчики правят, но тогда это может затянуться на неопределённое время.
19 сен 15, 11:27    [18169360]     Ответить | Цитировать Сообщить модератору
 Re: Импорт из кривого Excel файла.  [new]
TimonSX
Member

Откуда:
Сообщений: 91
Ну короче ошибка в ...\xl\styles.xml
в месте
<cellXfs count="12">
		<xf/>    ----Вот это надо удалить
		<xf applyAlignment="true">----Вот это надо удалить
			<alignment horizontal="left"/>----Вот это надо удалить
		</xf>----Вот это надо удалить
		<xf fontId="2" applyFont="true" applyAlignment="true">----Вот это надо удалить
			<alignment horizontal="left"/>----Вот это надо удалить
		</xf>----Вот это надо удалить
		<xf numFmtId="3" fontId="2" applyNumberFormat="true" applyFont="true" applyAlignment="true">
			<alignment horizontal="right"/>
		</xf>


И сразу все работает. Буду с поставщиком связываться.
19 сен 15, 14:14    [18169626]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить