Здравствуйте Little, вы писали:
L>Необходимо найти информацию, которая расположена в файле *.xls. L>Как это организовать? Как осуществить поиск в одном листе? L>Работают ли SQL-команды?
Если я правильно понял, то имеем желание работать с таблицей MS Excel,
как с таблицей базы данных. Вот один вариант:
1. Создаем в Excel поименованный диапазон;
2. Настраиваем ODBC (Панель управления->Источники данных ODBC);
3. Выбираем Excel Files, затем "Выбор книги" — указывем свой *.xls;
4. В AppWizard обеспечиваем поддержку баз данных, Data Source — ODBC — Excel Files, указываем тот самый поименованный диапазон;
5. Ну а дальше как учили ... и SQL-команды будут работать ;)
In the land of the blind the one-eyed man is king.
Tom Waits.
Здравствуйте Feudor, вы писали:
L>>Работают ли SQL-команды?
F>Если я правильно понял, то имеем желание работать с таблицей MS Excel, F>как с таблицей базы данных. Вот один вариант: F>1. Создаем в Excel поименованный диапазон; F>2. Настраиваем ODBC (Панель управления->Источники данных ODBC); F>3. Выбираем Excel Files, затем "Выбор книги" — указывем свой *.xls; F>4. В AppWizard обеспечиваем поддержку баз данных, Data Source — ODBC — Excel Files, указываем тот самый поименованный диапазон;
Это все ясно.
F>5. Ну а дальше как учили ... и SQL-команды будут работать ;)
Как например обратиться к листу, называемый "Моя страница", и поименованный диапазон невозможно задать. Необходимо работать как есть. Какой получится SQL-запрос?
Здравствуйте Little, вы писали:
F>>5. Ну а дальше как учили ... и SQL-команды будут работать ;)
L>Как например обратиться к листу, называемый "Моя страница", и поименованный диапазон невозможно задать. Необходимо работать как есть. Какой получится SQL-запрос?
L>SELECT x FROM "Моя страница" WHERE ...
Ну, дык лист будет называться примерно так "Моя страница$". А ч/з поименованный диапазон работать удобнее. Если проблемма сделать его то это делается так: выделяется необходимый диапазон; в поле со списком, которое находится над левым верхним углом листа, что под панелью инструментов, где стоит координата левой верхней клетки выделенного диапазона, пишем имя диапазона — лучше латинскими буквами. Потом "как учили" цепляемся ч/з ODBC и в визарде видим, что в нашей книге появился именованный диапазон. Лучше бы, чтобы в верхней строке диапазона стояли имена колонок, тогда и запрос сформировать проще. Если же размер диапазона будет расти (увиличиваться количество строк), то можно и без именованного диапазона, но надо бы, чтобы в первой строке листа стояли наименования колонок, опять же для облегчения создания запроса.
Здравствуйте tpg, вы писали:
tpg>Ну, дык лист будет называться примерно так "Моя страница$".
Проблема в том, что я толком не знаю SQL, пожалуйста, на пальцах объясните мне как
выполнить запрос данных из таблицы с листа с руским назнанием и без поименнованного
диапазон. Как для тупого :)) пример пожалуйста!!!!
Здравствуйте Little, вы писали:
L>Здравствуйте tpg, вы писали:
tpg>>Ну, дык лист будет называться примерно так "Моя страница$".
L>Проблема в том, что я толком не знаю SQL, пожалуйста, на пальцах объясните мне как L>выполнить запрос данных из таблицы с листа с руским назнанием и без поименнованного L>диапазон. Как для тупого :)) пример пожалуйста!!!!
Прошу прощения, что сразу не ответил. Возможность общаться в форуме у меня только на работе. Ну, вот, например, есть таблица с колонками: Наименование, Арт, кол-во, Приход, цена с НДС, Итого с НДС. Как писал Feudor, создаем поименованный диапазон, ну, скажем F326_113, и создаем источник ODBC. Сохраняем книгу и все. В качестве примера привожу запрос построенный в MS Query с русскими названиями как входных колонок так и результирующих. Примерно тоже самое будет и в MS Access.
SELECT first(F326_113.арт) AS 'Арт', F326_113.Наименование, Sum(F326_113.`кол-во`) AS 'Приход', first(F326_113.`цена с НДС`) AS 'Закуп', Sum(F326_113.`ИТОГО с НДС`) AS 'Итого', firstF326_113.Прайс) AS 'Прайс' FROM F326_113 F326_113 GROUP BY F326_113.Наименование
Причем, используя MS Query можно результаты запроса сохранить в той же книзи, что и источник данных, скажем, на другом листе.
Здравствуйте tpg, вы писали:
tpg>Прошу прощения, что сразу не ответил. Возможность общаться в форуме у меня только на работе. Ну, вот, например, есть таблица с колонками: Наименование, Арт, кол-во, Приход, цена с НДС, Итого с НДС. Как писал Feudor, создаем поименованный диапазон, ну, скажем F326_113, и создаем источник ODBC. Сохраняем книгу и все. В качестве примера привожу запрос построенный в MS Query с русскими названиями как входных колонок так и результирующих. Примерно тоже самое будет и в MS Access.
tpg>SELECT first(F326_113.арт) AS 'Арт', F326_113.Наименование, Sum(F326_113.`кол-во`) AS 'Приход', first(F326_113.`цена с НДС`) AS 'Закуп', Sum(F326_113.`ИТОГО с НДС`) AS 'Итого', firstF326_113.Прайс) AS 'Прайс' FROM F326_113 F326_113 GROUP BY F326_113.Наименование
tpg>Причем, используя MS Query можно результаты запроса сохранить в той же книзи, что и источник данных, скажем, на другом листе.
Спасибо. Это понятно.
А если нет возможности задать поименованный диарпазон, т.е. приходится работать с файлом как есть, то что делать?
Здравствуйте Little, вы писали:
tpg>>SELECT first(F326_113.арт) AS 'Арт', F326_113.Наименование, Sum(F326_113.`кол-во`) AS 'Приход', first(F326_113.`цена с НДС`) AS 'Закуп', Sum(F326_113.`ИТОГО с НДС`) AS 'Итого', firstF326_113.Прайс) AS 'Прайс' FROM F326_113 F326_113 GROUP BY F326_113.Наименование
tpg>>Причем, используя MS Query можно результаты запроса сохранить в той же книзи, что и источник данных, скажем, на другом листе.
L>Спасибо. Это понятно. L>А если нет возможности задать поименованный диарпазон, т.е. приходится работать с файлом как есть, то что делать?
Ну, и не надо. Главное, чтобы для простоты были поименованы колонки (в строке 1). Запрос будет выбираться по колонкам до самой нижней непустой клетки. Или кинь мне полное описание своей книги (или её части), я напишу подробную инструкцию, как это всё дело монтырить на экселе например, не закрывая книгу, с сохранением нужных значений в ней же самой.
Здравствуйте tpg, вы писали:
tpg>Здравствуйте Little, вы писали:
L>>А если нет возможности задать поименованный диарпазон, т.е. приходится работать с файлом как есть, то что делать?
Кстати на CodeGuru в разделе VC++ / Database есть хороший пример работы с Экселем. И к нему полезные коментарии. :-)
K>Кстати на CodeGuru в разделе VC++ / Database есть хороший пример работы с Экселем. И к нему полезные коментарии. :-)
А вот пример работы с Экселем из Дао, который родился у меня из вышеназванного источника. Здесь в CListCtrl m_list набиваются данные из файла Import.xls — лист Import.
try
{
CDaoDatabase* pDB = new CDaoDatabase; pDB->Open("Import.xls", TRUE, TRUE, "Excel 5.0;");
CDaoRecordset rs(pDB) ;
rs.Open (dbOpenDynaset, "select * from [Import$]");
rs.MoveLast();
CString str;
short nFields = rs.GetFieldCount();
for ( int i = 0; i < nFields; i++ )
{
CDaoFieldInfo fieldinfo;
rs.GetFieldInfo( i, fieldinfo );
m_list.InsertColumn( i, fieldinfo.m_strName, LVCFMT_LEFT, 100 );
}
rs.MoveFirst();
int count = 0, pos = 0;
while (! rs.IsEOF() )
{
for ( int i = 0; i < nFields; i++ )
{
COleVariant var0;
var0.Clear();
rs.GetFieldValue( i, var0 );
switch ( var0.vt )
{
case VT_BSTR: str = var0.bstrVal; break;
case VT_I4: str.Format ("%ld ", var0.lVal); break;
default: str.Format ("%.0f ", var0.dblVal);
}