База в Excel'e
От: Little  
Дата: 30.06.01 01:34
Оценка:
Необходимо найти информацию, которая расположена в файле *.xls.
Как это организовать? Как осуществить поиск в одном листе?
Работают ли SQL-команды?
Re: База в Excel'e
От: Feudor  
Дата: 11.07.01 06:51
Оценка:
Здравствуйте 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.
Re[2]: База в Excel'e
От: Little  
Дата: 13.07.01 11:59
Оценка:
Здравствуйте 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-запрос?

SELECT x FROM "Моя страница" WHERE ...
Re[3]: База в Excel'e
От: tpg Россия http://www.sql.ru/
Дата: 03.08.01 08:18
Оценка:
Здравствуйте Little, вы писали:

F>>5. Ну а дальше как учили ... и SQL-команды будут работать ;)


L>Как например обратиться к листу, называемый "Моя страница", и поименованный диапазон невозможно задать. Необходимо работать как есть. Какой получится SQL-запрос?


L>SELECT x FROM "Моя страница" WHERE ...


Ну, дык лист будет называться примерно так "Моя страница$". А ч/з поименованный диапазон работать удобнее. Если проблемма сделать его то это делается так: выделяется необходимый диапазон; в поле со списком, которое находится над левым верхним углом листа, что под панелью инструментов, где стоит координата левой верхней клетки выделенного диапазона, пишем имя диапазона — лучше латинскими буквами. Потом "как учили" цепляемся ч/з ODBC и в визарде видим, что в нашей книге появился именованный диапазон. Лучше бы, чтобы в верхней строке диапазона стояли имена колонок, тогда и запрос сформировать проще. Если же размер диапазона будет расти (увиличиваться количество строк), то можно и без именованного диапазона, но надо бы, чтобы в первой строке листа стояли наименования колонок, опять же для облегчения создания запроса.
Re[4]: База в Excel'e
От: Little  
Дата: 14.08.01 17:22
Оценка:
Здравствуйте tpg, вы писали:

tpg>Ну, дык лист будет называться примерно так "Моя страница$".


Проблема в том, что я толком не знаю SQL, пожалуйста, на пальцах объясните мне как
выполнить запрос данных из таблицы с листа с руским назнанием и без поименнованного
диапазон. Как для тупого :)) пример пожалуйста!!!!
Re[5]: База в Excel'e
От: tpg Россия http://www.sql.ru/
Дата: 17.08.01 01:29
Оценка:
Здравствуйте 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 можно результаты запроса сохранить в той же книзи, что и источник данных, скажем, на другом листе.
Re[6]: База в Excel'e
От: Little  
Дата: 17.08.01 14:40
Оценка:
Здравствуйте 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 можно результаты запроса сохранить в той же книзи, что и источник данных, скажем, на другом листе.



Спасибо. Это понятно.
А если нет возможности задать поименованный диарпазон, т.е. приходится работать с файлом как есть, то что делать?
Re[7]: База в Excel'e
От: tpg Россия http://www.sql.ru/
Дата: 22.08.01 05:23
Оценка:
Здравствуйте 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). Запрос будет выбираться по колонкам до самой нижней непустой клетки. Или кинь мне полное описание своей книги (или её части), я напишу подробную инструкцию, как это всё дело монтырить на экселе например, не закрывая книгу, с сохранением нужных значений в ней же самой.
Re[8]: База в Excel'e
От: Koumandin Россия  
Дата: 22.08.01 16:47
Оценка:
Здравствуйте tpg, вы писали:

tpg>Здравствуйте Little, вы писали:


L>>А если нет возможности задать поименованный диарпазон, т.е. приходится работать с файлом как есть, то что делать?


Кстати на CodeGuru в разделе VC++ / Database есть хороший пример работы с Экселем. И к нему полезные коментарии. :-)
Re[9]: База в Excel'e
От: Koumandin Россия  
Дата: 22.08.01 16:58
Оценка:
Здравствуйте Koumandin, вы писали:


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);
}

if ( i == 0 )
pos = m_list.InsertItem( count++, str );
else
{
LVITEM lvi;
lvi.mask = LVIF_TEXT;
lvi.iItem = pos;
lvi.iSubItem = i;
lvi.pszText = (char*)(LPCSTR)str;
m_list.SetItem( &lvi );
}
}
rs.MoveNext();
}

}
catch (CDaoException e)
{
AfxMessageBox (e.m_pErrorInfo->m_strDescription, MB_OK ) ;
}

Удачи ;-)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.