Использование Excel 97 - не сядьте на мель
Одной из многочисленных полезных функций Excel 97 является сохранение таблиц в форматах различных баз данных. Это можно применить, например, для обмена данными между книгой Excel и другими программами. Недавно мне пришлось решать следующую задачу: в книге на множестве листов помесячно рассчитываются вредные выбросы в атмосферу от производства и налоги за них, а результаты необходимо передавать в вышестоящее ведомство в виде базы.DBF, пустой образец которой уже имеется.
Сначала все кажется очень просто. Открываем в Excel свою книгу, а потом и эту базу, которая представляется как единственный лист. Щелкаем правой кнопкой мыши по названию этого листа, выбираем действие "Переместить/Скопировать" и в списке открытых документов выбираем свою книгу - <Ok> . Теперь в своей книге имеем дополнительный лист, в первой строке которого прописаны названия полей базы данных.
Далее рутина - копируем нужные столбцы данных расчетов, переходим в дополнительный лист, выбираем пункт меню "Правка\Специальная вставка", отмечаем "Только значения" - <Ok> . Потом все запишем в виде макроса, а сейчас продолжаем.
Сохраняем дополнительный лист как базу DBF, потом сохраняем опять как книгу Excel.
Запускаем старый добрый Norton 5.0 в сессии DOS, выбираем полученную базу DBF, нажимаем F3 - запускается dbview для просмотра - и... ничего не видим!!! Поля, структура - все как надо, но никаких записей с результатами нет - база пуста. Это было настолько неожиданно, что я не поверил собственным глазам.
В недоумении внимательно повторяем все операции снова и снова и наблюдаем все тот же печальный результат.
После нескольких дней начинается уже помутнение рассудка и небольшая паника. Обязательства взяты, работу надо выполнить, а Excel не хочет. От горя покопался в руководстве Microsoft по программированию в Visual Basic и убедился в стойкости афоризма "За деревьями и леса не видать".
Тут и выясняется одна ма-а-ленькая деталь. Когда Excel открывает базу DBF, он запоминает, сколько там было записей.
И сколько чего бы вы туда ни писали, он сохранит в формате DBF ровно столько записей, сколько там было раньше. А если вы по наивности открыли пустую базу DBF, то он и сохранит ее как пустую, даже если там будут заполнены все ячейки до единой.
Теперь, когда, Слава Богу, все ясно, нужно всего-то добавить достаточно пустых записей в первоначальную базу DBF и заново повторить все операции - открыть, переместить, скопировать, вставить, сохранить...
Средствами MS Office делается примитивно просто - запускаем Access, создаем пустую базу данных, в ней выбираем закладку "Таблицы", нажимаем "Создать" и выбираем "Связанная таблица". В диалоге выбора файла БД указываем тип файлов *.DBF и свою базу данных - <Ok> .
Диалог выбора индексного файла можно отменить. Теперь открываем таблицу для редактирования, добавляем сотню-другую записей с помощью любимой народом клавиши <Enter>, сохраняем и закрываем Access.
Заново все прокручиваем в Excel, проверяем - все в порядке. Правда, с записями получился перебор - кроме заполненных, в базе сохранен и весь запас пустых записей. Но с этим похоже придется мириться - по крайней мере лучше иметь слишком много, чем совсем ничего.
Можно, конечно, поработать побольше и получить более приемлемый результат. С помощью нортоновского dbview по клавише F2 получаем подробную структуру БД. Создаем новый лист, в ячейках первой строки вручную прописываем имена полей базы данных (без пробелов и не более 10-и сомволов).
Затем выделяем столбец с именем поля и через меню "Формат/Ячейки" устанавливаем тип данных поля и количество знаков после запятой для числового типа. Обязательно установите требуемую ширину столбца - целое значение ширины воспринимается Excel как количество знаков для данных поля базы. И так для каждого столбца с именем поля БД.
Теперь можно вставить нужные данные и сохранить как базу DBF, только потом обязательно сохраните как книгу Excel и для последующей работы открывайте именно эту книгу, а не базу DBF, иначе опять не сможете записать дополнительные записи.
Возможно, эти моменты и описаны где-нибудь в руководстве, но покажите мне пальцем на того человека, который прочитал абсолютно все, что там есть, - лично у меня просто нет столько времени. Надеюсь, статья вам поможет.
Виктор Маковчик
Сначала все кажется очень просто. Открываем в Excel свою книгу, а потом и эту базу, которая представляется как единственный лист. Щелкаем правой кнопкой мыши по названию этого листа, выбираем действие "Переместить/Скопировать" и в списке открытых документов выбираем свою книгу - <Ok> . Теперь в своей книге имеем дополнительный лист, в первой строке которого прописаны названия полей базы данных.
Далее рутина - копируем нужные столбцы данных расчетов, переходим в дополнительный лист, выбираем пункт меню "Правка\Специальная вставка", отмечаем "Только значения" - <Ok> . Потом все запишем в виде макроса, а сейчас продолжаем.
Сохраняем дополнительный лист как базу DBF, потом сохраняем опять как книгу Excel.
Запускаем старый добрый Norton 5.0 в сессии DOS, выбираем полученную базу DBF, нажимаем F3 - запускается dbview для просмотра - и... ничего не видим!!! Поля, структура - все как надо, но никаких записей с результатами нет - база пуста. Это было настолько неожиданно, что я не поверил собственным глазам.
В недоумении внимательно повторяем все операции снова и снова и наблюдаем все тот же печальный результат.
После нескольких дней начинается уже помутнение рассудка и небольшая паника. Обязательства взяты, работу надо выполнить, а Excel не хочет. От горя покопался в руководстве Microsoft по программированию в Visual Basic и убедился в стойкости афоризма "За деревьями и леса не видать".
Тут и выясняется одна ма-а-ленькая деталь. Когда Excel открывает базу DBF, он запоминает, сколько там было записей.
И сколько чего бы вы туда ни писали, он сохранит в формате DBF ровно столько записей, сколько там было раньше. А если вы по наивности открыли пустую базу DBF, то он и сохранит ее как пустую, даже если там будут заполнены все ячейки до единой.
Теперь, когда, Слава Богу, все ясно, нужно всего-то добавить достаточно пустых записей в первоначальную базу DBF и заново повторить все операции - открыть, переместить, скопировать, вставить, сохранить...
Средствами MS Office делается примитивно просто - запускаем Access, создаем пустую базу данных, в ней выбираем закладку "Таблицы", нажимаем "Создать" и выбираем "Связанная таблица". В диалоге выбора файла БД указываем тип файлов *.DBF и свою базу данных - <Ok> .
Диалог выбора индексного файла можно отменить. Теперь открываем таблицу для редактирования, добавляем сотню-другую записей с помощью любимой народом клавиши <Enter>, сохраняем и закрываем Access.
Заново все прокручиваем в Excel, проверяем - все в порядке. Правда, с записями получился перебор - кроме заполненных, в базе сохранен и весь запас пустых записей. Но с этим похоже придется мириться - по крайней мере лучше иметь слишком много, чем совсем ничего.
Можно, конечно, поработать побольше и получить более приемлемый результат. С помощью нортоновского dbview по клавише F2 получаем подробную структуру БД. Создаем новый лист, в ячейках первой строки вручную прописываем имена полей базы данных (без пробелов и не более 10-и сомволов).
Затем выделяем столбец с именем поля и через меню "Формат/Ячейки" устанавливаем тип данных поля и количество знаков после запятой для числового типа. Обязательно установите требуемую ширину столбца - целое значение ширины воспринимается Excel как количество знаков для данных поля базы. И так для каждого столбца с именем поля БД.
Теперь можно вставить нужные данные и сохранить как базу DBF, только потом обязательно сохраните как книгу Excel и для последующей работы открывайте именно эту книгу, а не базу DBF, иначе опять не сможете записать дополнительные записи.
Возможно, эти моменты и описаны где-нибудь в руководстве, но покажите мне пальцем на того человека, который прочитал абсолютно все, что там есть, - лично у меня просто нет столько времени. Надеюсь, статья вам поможет.
Виктор Маковчик
Компьютерная газета. Статья была опубликована в номере 26 за 1999 год в рубрике soft :: субд