Невозможно получить свойство specialcells класса range 1с
Как осуществить чтение/запись данных из/в Excel на языке 1с (используя COM-объект)
Основные методы, принципы и хитрости, используемые при работе с EXCEL через COM-объект
Чтение данных из Excel
Доступ из 1С к Excel производится посредством OLE. Создание COM-объекта:
Теперь используя переменную Эксель можно управлять приложением Excel.
- Внимание! Microsoft Excel должен быть установлен на компьютере!
Следующая команда откроет книгу:
Перед тем, как начать считывание данных, укажем лист книги, с которого будем считывать данные:
Нумерация листов книги начинается с 1. Общее количество листов можно получить, используя следующую команду:
Лист можно выбрать по имени листа в книге:
Имя листа в книге можно получить по номеру:
Точно так же можно задать имя листа:
Итак, мы открыли книгу и выбрали лист, теперь посмотрим, сколько строк и колонок на выбранном листе:
Получим значения ячейки листа в строке НомерСтроки и в колонке НомерКолонки:
Ниже приведен отрывок кода, запустив который мы прочитаем все данные с первой страницы:
После выполнения действий необходимо закрыть книгу:
Выгрузка данных в Excel
Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо создать новую, и выбрать рабочий лист для вывода данных.
Для создания новой книги можно использовать следующий код:
При создании книги автоматически создаются листы (по умолчанию 3). Нам остается только выбрать нужный:
Или добавить в книгу новый лист:
Добавим в ячейку на листе значение:
После выполнения действий необходимо закрыть книгу:
Как программно сохранить файл Excel в формате 2003 года
Часто используемые методы Excel
Хитрости Excel
Как выборочно разрешить / запретить редактирование ячеек листа
Как запретить появление на экране всяких вопросов от Excel
Excel, чтоб вопрос не задавал:
Как добавить лист Excel в конец списка листов книги или после конкретного листа (а не в начало книги)
Метод работает для платформ 1С v8.
Как программно скрыть колонку файла Excel
Как программно назначить ячейке файла Excel перенос по словам
Как обработать файл xls, если Excel не установлен на компьютере
Для этого можно использовать метод
Код для 7.7, решающий такую задачу, будет выглядеть примерно так:
Как указать цвет шрифта в ячейке, цвет рамки, цвет фона
Организация автоматической обработки файлов xls из выбранной папки
Создание кнопки в Excel в 7.7
текст макроса пишется в переменную st
Как подключиться к запущенному Excel-евскому файлу в реальном времени, изменить его и даже не сохранять, а просто переключить окно на 1С и сразу же выгружать данные в табличную часть, лишь переключив окна
Описание команды ПолучитьCOMОбъект
создает новый документ Excel. В дальнейшем этот документ может быть программно заполнен и сохранен в файл.
Если первый параметр функции пропущен, то будет произведена попытка получить активный объект указанного типа. Если активного объекта указанного типа в настоящий момент не существует, то будет вызвано исключение. Например, в результате выполнения оператора
Переменная П получит значение типа COMОбъект, соответствующее активному приложению MS Excel, если таковое имелось, или будет вызвано исключение, если активных экземпляров MS Excel не было.
Пример:
procedure TfMainForm.N2Click(Sender: TObject);
var
WorkBk : _WorkBook;
WorkSheet : _WorkSheet;
K, R, X, Y : Integer;
IIndex : OleVariant;
RangeMatrix : Variant;
NomFich : WideString;
begin
try
if OpenDlg.Execute then begin
Application.CreateForm(TfShowValues, fShowValues);
fShowValues.Caption := OpenDlg.FileName;
NomFich := OpenDlg.FileName;
IIndex := 1;
XLApp.Connect;
// Открываем файл Excel
XLApp.WorkBooks.Open(NomFich,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,0);
WorkBk := XLApp.WorkBooks.Item[IIndex];
WorkSheet := WorkBk.WorkSheets.Get_Item(1) as _WorkSheet;
// Для того, чтобы знать размеры Листа (WorkSheet), то есть число строк
// и колонок, мы активизмруем последнюю непустую ячейку
// Получаем значение последней строки
X := XLApp.ActiveCell.Row;
// Получаем значение последней колонки
Y := XLApp.ActiveCell.Column;
// Определяем число колонок в TStringGrid
fShowValues.GenericStringGrid.ColCount := Y;
// Связываем Variant переменные Листа с Delphi Variant Matrix
RangeMatrix := XLApp.Range['A1',XLApp.Cells.Item[X,Y]].Value;
// Закрываем Excel и отсоединяемся от сервера
XLApp.Quit;
XLApp.Disconnect;
// Цикл для заполнения TStringGrid
K := 1;
repeat
for R := 1 to Y do
fShowValues.GenericStringGrid.Cells[(R - 1),(K - 1)] := RangeMatrix[K,R];
Inc(K,1);
fShowValues.GenericStringGrid.RowCount := K + 1;
until
K > X;
// Освобождаем Delphi Variant Matrix
RangeMatrix := Unassigned;
end;
except
ShowMessage('Невозможно открыть файл');
Exit;
end;
end;
Открываю таблицу возникает ошибка в выделенной мной строке:
'Метод Activate из класса Range завершён неверно"
perviy oshibka zdes
procedure TfMainForm.N2Click(Sender: TObject);
var
WorkBk : _WorkBook;
WorkSheet : _WorkSheet;
K, R, X, Y : Integer;
IIndex : OleVariant;
RangeMatrix : Variant;
NomFich : WideString;
begin
try
if OpenDlg.Execute then begin
Application.CreateForm(TfShowValues, fShowValues);
fShowValues.Caption := OpenDlg.FileName;
NomFich := OpenDlg.FileName;
IIndex := 1;
XLApp.Connect;
// Открываем файл Excel
XLApp.WorkBooks.Open(NomFich,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,0);
WorkBk := XLApp.WorkBooks.Item[IIndex];
WorkSheet := WorkBk.WorkSheets.Get_Item(1) as _WorkSheet;
// Для того, чтобы знать размеры Листа (WorkSheet), то есть число строк
// и колонок, мы активизмруем последнюю непустую ячейку
// Получаем значение последней строки
X := XLApp.ActiveCell.Row;
// Получаем значение последней колонки
Y := XLApp.ActiveCell.Column;
// Определяем число колонок в TStringGrid
fShowValues.GenericStringGrid.ColCount := Y;
// Связываем Variant переменные Листа с Delphi Variant Matrix
RangeMatrix := XLApp.Range['A1',XLApp.Cells.Item[X,Y]].Value;
// Закрываем Excel и отсоединяемся от сервера
XLApp.Quit;
XLApp.Disconnect;
// Цикл для заполнения TStringGrid
K := 1;
repeat
for R := 1 to Y do
fShowValues.GenericStringGrid.Cells[(R - 1),(K - 1)] := RangeMatrix[K,R];
Inc(K,1);
fShowValues.GenericStringGrid.RowCount := K + 1;
until
K > X;
// Освобождаем Delphi Variant Matrix
RangeMatrix := Unassigned;
end;
except
ShowMessage('Невозможно открыть файл');
Exit;
end;
end;
Открываю таблицу возникает ошибка в выделенной мной строке:
'Метод Activate из класса Range завершён неверно"
подскажите другой алгоритм или дайте линк.
если честно я не посмотрел на твой код!
вот тебя другой код который делает импорт из ехсел на базу! а ты просто изменяеш там и делаеш импорт не на базу а на StringGrid!
Да ну. Гонишь.
Тот код писал дома.
Счас на работе, скопировал его же прям с форума вставил в новый проект и все нормально встатвляется.
Один файл. За ним второй. И третий.
И строчки добавляются
Да ну. Гонишь.
Тот код писал дома.
Счас на работе, скопировал его же прям с форума вставил в новый проект и все нормально встатвляется.
Один файл. За ним второй. И третий.
И строчки добавляются
ни на что не повлияет если я оставлю
RangeMatrix := XLApp.Range['A1',XLApp.Cells.Item[X,Y]].Value; .
хм. скажи вот с maxrow прально я сделал?
maxrow:integer;
maxrow:=0; в начале процедуры
Читайте также: