powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Подключение к Excel- файлу из jscript - если имя листа неизвестно.
21 сообщений из 21, страница 1 из 1
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39772310
Фотография natalitvinenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Win7,Excel2003

Пытаюсь подключится к файлу как к источнику данных. Пока я точно указываю название листа- все в порядке:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
var WshShell = new ActiveXObject( 'WScript.Shell' );
var  connection = new ActiveXObject("ADODB.Connection"),recordset = new ActiveXObject("ADODB.Recordset");
connection.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" +pppath+"; Persist Security Info=False;Extended Properties=Excel 8.0;");

        var rs = new ActiveXObject("ADODB.Recordset");
        var SQL = "select * from [Лист2$]";
        rs.Open(SQL, connection);
        if(rs.bof)
        {
            document.write('No Data Avaliable');
        } 


Но в реальных файлах могут быть и любые названия, и любые листы( в смысле может не быть Sheet(1) , как бы он не назывался). Как на месте Лист2 написать что-то вроде ActiveSheet? Варианты вида
Код: javascript
1.
2.
var SQL = "select * from [ActiveSheet$]";
var SQL = "select * from ActiveSheet";


предсказуемо не срабатывают.
Заранее спасибо за помощь.
...
Рейтинг: 0 / 0
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39772416
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39772883
SQLPowerUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
natalitvinenko,

на всякий случай, здесь 2 примера, как получить названия листов Excel
https://stackoverflow.com/questions/1397158/connect-to-excel-with-ado-dont-know-sheet-names
...
Рейтинг: 0 / 0
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39772948
Фотография natalitvinenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQLPowerUser,
проблема ж не в том, что я не могу найти все названия листов. Проблема в том, что я могу использовать файл Экселя только как источник данных. Я не могу в данной ситуации его загрузить, воспользоваться программами, свойствами и чем угодно вообще. Я могу только как вампир - прицепиться, вытащить данные и отвалиться. В реальной ситуации пользования программой я не знаю, какие там будут стоять Excel, какие версии и будут ли стоять вообще. Мой предприятие до войны приложило усилия , чтобы все, что у нас стоит на машинах, было лицензионно по максимуму. В результате у тех, кому не было нужно, стоят продукты типа Libre офиса, чего -то фриварного. Поэтому любая попытка выйти за драйвера, обезпечивающий связь как с базой данных, которые по умолчанию есть или могут быть легко поставлены, чревато тем, что программа просто не сможет работать. Просто сказать: не пашет? да поставь офис,- не получится.
Поэтому пока пришла к выводу, что легче убедить юзеров свои данные, у которых шапка, дизайн и т.п, всегда грузить в заранее розданный файл, на второй странице...ну пусть уже на второй... которого будут формулы, раскидывающие данные по правильным столбцам, а вверху будет правильная шапка из одной строки, для поедания как базы данных. Как-так на сейчас.
...
Рейтинг: 0 / 0
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39773707
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
natalitvinenko,
очень сомнительный подход использовать excel как морду для заполнения БД
...
Рейтинг: 0 / 0
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39773756
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
natalitvinenko,

.. сделайте в шаблоне файла большую кнопку "Сохранить как Excel 2003 XML" ... в этом формате могут сохранять все версии МС Офиса и Опен-Либре Офиса ... а VB Script может работать с XML ...
...
Рейтинг: 0 / 0
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39775652
Фотография natalitvinenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
waszkiewicznatalitvinenko,
очень сомнительный подход использовать excel как морду для заполнения БД
Но эта мысля - не моя.
Дальше - больше. Листочек с формулами отменяется. Дано: дикий файл установленного формата, прям оттуда и читать. В связи с чем сразу начинаю гуглить, как принять как базу данных не целый лист, а кусок листа. Потом, при приеме листа в программу выяснилось, что часть текстовых данных она просто не читает. В самом Эксель , при возможности открыть, это борется формулами вида

=""&Лист2222!C7&""

Что делать в программе- не пойму.
...
Рейтинг: 0 / 0
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39775675
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит "не читает"? Что за бред, как такое может быть. "Не верю" ( C )

IMHO & AFAIK. Если объяснять аллегориями:

Взять старый инструмент - заржавелый молоток с маркой ODBC, им пытаются забивать шурупы. Шурупы входят тяжело, из дерева летят шепки.

Кто же виноват?

Решать или огранизационно: вместо шурупов использовать гвозди заранее согласованной длины и тольщины. Создать шаблон файла (выложить на скачивание), создать инструкцию по заполнению, если пользователь вместо прямых гвоздей подсовывает гнутые/ржавые гвозьди или шурупы - идет в пешее эротическое путешествие

Или взять современное средство: например Java и Apache POI и сделать свою hand-майд модель шуруповерта, приспособленную для шурупов Вашей марки с автодетектированием: шага резьбы, погнутости, ржавости и так далее....

Всего того же самого наверное можно и через ODBC добиться.... но будет это сложнее (в программирование), крайне медленно (во время выполнения) и скорее всего глукавее (зависит от того, из какой части тела растут верхнии конечности)
...
Рейтинг: 0 / 0
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39775767
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
natalitvinenko,

.. а у вас в руках только JScript/VBScript ... ? .. не совсем понятно, что вы называете программой .. если да, и если утвержденный формат файла Excel+2007 (т.е Open Document Format - xlsx), то этот файл можно распаковать архиватором, и получится уже готовый XML, с которым можно работать скриптовым языком текстовыми функциями ... Это, конечно, средневековье, но один раз сделать - потом заработает ...
...
Рейтинг: 0 / 0
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39776311
Фотография natalitvinenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Про "не читает". В Excel периодически возникает такая зараза, такой глюк, когда стоит в ячейке число, которое вдруг перестает пониматься как число или текст, который отказывается быть текстом. Манипуляции с форматом в таком случае бессмысленны- можно сколько угодно тыкать в числовой или текстовый, не взлетит. Лечится для числа это , например. созданием в другой ячейке формулы вида
=ЯчейкаХ +0
Ну то есть явно ткнуть Excel мордой- это число, слышишь, это -число! И потом уже манипулировать с ним. Для текста шаманские действия выглядят как &"".
При попытке вот такое считать из рекордсета, заполненного данными Excel, оно упорно распознает данные как null. Из одного файла нормально читает, из другого- нет. У меня уже мозги за сегодня поднимаются.
Еще ситуация- дочитывает до определенной строки и все. Всю таблицу брать отказывается, останавливается где-то даже не посередине.
...
Рейтинг: 0 / 0
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39776356
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
natalitvinenkoПро "не читает". В Excel периодически возникает такая зараза, такой глюк, когда стоит в ячейке число, которое вдруг перестает пониматься как число или текст, который отказывается быть текстом...


Проблема с форматом в Excel сталкивался, но обычно они объясняются вполне обычными вещами (например кто-то non break space пробел (или другой символ) в числовую ячейку забил, на экране не видно, а ячейка стала текстовая; с датами/страками тоже весело бывает, когда число или строчку вида 20.03 Excel "внезапно" начинает считать 20 марта etc..etc...)
...
Рейтинг: 0 / 0
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39776431
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jet - не лучшее средство для импорта данных из Excel
...
Рейтинг: 0 / 0
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39776484
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилjet - не лучшее средство для импорта данных из Excel

Зато быстрое. Но самое быстрое, что я видел в своей жизни, и способное переваривать такие эксели, на которых другие решения вешают намертво машину, это продукт от Aspose.
...
Рейтинг: 0 / 0
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39776840
Фотография natalitvinenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попыталась применить IMEX=1. IMEX=1 помогает частично:-) В одном столбце все наладилось(а были null), в двух других пишет нули- а там цифири.
Код: javascript
1.
connection.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" +pppath+"; Persist Security Info=False;Extended Properties='Excel 8.0;HDR=YES;IMEX=1';");



И дурацкий вопрос. Если название листа с пробелами, как писать запрос?
Вот так понятно
Код: javascript
1.
var SQL = "select * from [Лист2$C6:S5000]";


А если лист называется "Шото и шото"? Варианты
Код: javascript
1.
2.
3.
var SQL = "select * from [Шото и шото$C6:S5000]";
var SQL = "select * from ['Шото и шото'$C6:S5000]";
var SQL = "select * from [[Шото и шото]$C6:S5000]";


не сработали.
...
Рейтинг: 0 / 0
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39777379
Фотография natalitvinenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
natalitvinenkoПопыталась применить IMEX=1. IMEX=1 помогает частично:-) В одном столбце все наладилось(а были null), в двух других пишет нули- а там цифири.

Нашла решение этой проблемы, вот - https://jingyangli.wordpress.com/2009/02/13/imex1-revisit-and-typeguessrows-setting-change-to-0-watch-for-performance/
Скопирую сюда
When we import mixed type data in a column from excel to SQL server, we may have issues with losing some data. We can set IMEX=1 to allow the incoming column allow mixed data types based on the Registry setting ImportMixedTypes to Text. However, there is a default setting for Excel to Guess Data Type of a column, the default value is 8.(The ISAM driver by default looks at the first eight rows and from that sampling determines the datatype.) We can change this value to 0 to force Excel to check all values in the column to choose the data type for the column.

Here is the registry setting we need to check:

Type Regedit from Run… command:

Under entries

Hkey_Local_Machine/Software/Microsoft/Jet/4.0/Engines/Excel/TypeGuessRows
Hkey_Local_Machine/Software/Microsoft/Jet/4.0/Engines/Excel/ImportMixedTypes

Change:
TypeGuessRows: 0 —-Check all column values before choosing the appropriate data type.ImportMixedTypes: Text —-import mixed-type columns as text.

Connection string:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\data\Book1.xls;Extended Properties="EXCEL 8.0;IMEX=1;HDR=YES";

–Or:

SELECT * FROM OPENROWSET(‘Microsoft.Jet.OLEDB.4.0’, ‘Excel 8.0;IMEX=1;HDR=YES;Database=C:\data\Book1.xls;’, ‘select * from [Sheet1$]’)

We are using IMEX=1, the Import Mode, in the connection string to apply the registry setting.

PS:

The possible settings of IMEX are: 0,1,2.

(0 is Export mode 1 is Import mode 2 is Linked mode (full update capabilities))





http://support.microsoft.com/kb/194124

http://support.microsoft.com/kb/189897
...
Рейтинг: 0 / 0
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39777432
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЗато быстрое....
Не верю ( C )

Нечему там быть быстрым.
А если действительно, по бизнесу, в одной колонке может быть "мешанина". Например табличка с группировками, подзаголовками (merge cells) и итогами. Я даже не представляю, как с помощью plain SELECT'а такие данные можно будет разпарсить.

natalitvinenkoНашла решение этой проблемы, вот - https://jingyangli.wordpress.com/2009/02/13/imex1-revisit-and-typeguessrows-setting-change-to-0-watch-for-performance/
Скопирую сюда

Спасибо.
...
Рейтинг: 0 / 0
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39777638
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevНе верю ( C )

Нечему там быть быстрым.

работа с данными vs работа с DOM деревом. действительно, чему там быть быстрым ))


Leonid KudryavtsevА если действительно, по бизнесу

требования нужны. а то дойдёт так до того, что "по бизнесу" там могут быть джипеги.
...
Рейтинг: 0 / 0
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39777648
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Excel 2003, откуда там DOM дерево?
...
Рейтинг: 0 / 0
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39777651
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилhVostt,

Excel 2003, откуда там DOM дерево?

точняк я путаю с excel'97
...
Рейтинг: 0 / 0
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39780794
Фотография natalitvinenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжаю отвечать на свои вопросы:-)
natalitvinenkoИ дурацкий вопрос. Если название листа с пробелами, как писать запрос?
Вот так понятно
Код: javascript
1.
var SQL = "select * from [Лист2$C6:S5000]";


А если лист называется "Шото и шото"? Варианты
Код: javascript
1.
2.
3.
var SQL = "select * from [Шото и шото$C6:S5000]";
var SQL = "select * from ['Шото и шото'$C6:S5000]";
var SQL = "select * from [[Шото и шото]$C6:S5000]";


не сработали.

Долго я смеялась и теперь рассказываю как анекдот- вообще никаких ограничителей ставить не надо:-)
Код: javascript
1.
var SQL = "select * from [Шото и шото$C6:S5000]";


Все - таки вот этот вариант прошел.
...
Рейтинг: 0 / 0
Подключение к Excel- файлу из jscript - если имя листа неизвестно.
    #39794097
Фотография natalitvinenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
natalitvinenkonatalitvinenkoПопыталась применить IMEX=1. IMEX=1 помогает частично:-) В одном столбце все наладилось(а были null), в двух других пишет нули- а там цифири.

Нашла решение этой проблемы, вот - https://jingyangli.wordpress.com/2009/02/13/imex1-revisit-and-typeguessrows-setting-change-to-0-watch-for-performance/
Скопирую сюда
When we import mixed type data in a column from excel to SQL server, we may have issues with losing some data. We can set IMEX=1 to allow the incoming column allow mixed data types based on the Registry setting ImportMixedTypes to Text. However, there is a default setting for Excel to Guess Data Type of a column, the default value is 8.(The ISAM driver by default looks at the first eight rows and from that sampling determines the datatype.) We can change this value to 0 to force Excel to check all values in the column to choose the data type for the column.
.....

http://support.microsoft.com/kb/194124

http://support.microsoft.com/kb/189897

Вдогонку сама себе- вдруг у кого такое будет. Это работает только на файлы xls, на xlsx это не поможет в чистом виде. Я еще дополнительно по реестру полазила и заменила в слове TypeGuessRows 8 на 0, там еще два места, иначе драйвер Microsoft.ACE.OLEDB.12.0 не воспримет изменений и продолжит ограничиваться 8 столбцами.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Подключение к Excel- файлу из jscript - если имя листа неизвестно.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]