Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Excel   Найти похожие ветки 

 
GetIt   (2004-03-24 01:11) [0]

Как узнать количество строк в Excel из Delphi ?
помажите..


 
KSergey ©   (2004-03-24 07:19) [1]

Количество заполненных строк видимо имеется в виду? Пробежать по ним, выбрать заполненные. Или до первой незаполненной - если разрыва не предвидится...


 
BanderLog ©   (2004-03-24 07:23) [2]

Есть специальная функция, которая выделяет ячейку границы заполненности, но как она называется не помню, надо порыться в хелпах.


 
Думкин ©   (2004-03-24 07:38) [3]

ActiveSheet.UsedRange.Rows.Count


 
GetIt   (2004-03-24 23:14) [4]

Да, почти так....
Сам отвечу, для тех кому интересно... наткнулся тут...

Получение данных из Excel
Это можно сделать с помощью следующей процедуры :
 
procedure TForm1.BitBtnFromExcelOnClick(Sender: TObject);
var
WorkBk : _WorkBook;
WorkSheet : _WorkSheet;
K, R, X, Y : Integer;
IIndex : OleVariant;
RangeMatrix : Variant;
NomFich : WideString;
begin
NomFich := ‘C:\MyDirectory\NameOfFile.xls’;
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), т.е. количество строк и количество
// столбцов, мы активируем его последнюю непустую ячейку
WorkSheet.Cells.SpecialCells(xlCellTypeLastCell,EmptyParam).Activate;
// Получаем значение последней строки
X := XLApp.ActiveCell.Row;
// Получаем значение последней колонки
Y := XLApp.ActiveCell.Column;
// Определяем количество колонок в TStringGrid
 GenericStringGrid.ColCount := Y;
// Сопоставляем матрицу WorkSheet с нашей Delphi матрицей
 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
     GenericStringGrid.Cells[(R - 1),(K - 1)] := RangeMatrix[K,R];
   Inc(K,1);
   GenericStringGrid.RowCount := K + 1;
 until
  K > X;
// Unassign the Delphi Variant Matrix
  RangeMatrix := Unassigned;
end;


 
BanderLog ©   (2004-03-25 06:43) [5]

Да, да, именно оно, а где нашёл не подскажешь, а то все перерыл, а где видел это - не помню. :)

// Чтобы знать размер листа (WorkSheet), т.е. количество строк и количество
// столбцов, мы активируем его последнюю непустую ячейку
WorkSheet.Cells.SpecialCells(xlCellTypeLastCell,EmptyParam).Activate;
// Получаем значение последней строки
X := XLApp.ActiveCell.Row;
// Получаем значение последней колонки
Y := XLApp.ActiveCell.Column;


 
Думкин ©   (2004-03-25 07:13) [6]

UsedRange
Returns a Range object that represents the used range on the specified worksheet. Read-only.

Почему - > Да, почти так.... ?


 
GetIt   (2004-03-26 08:15) [7]

2 BanderLog:

Не, не найду... но вот все, что там было....


Обмен данными с Excel.
Автор: Fernando Silva

В Delphi 5, для обмена данными между Вашим приложением и Excel можно использовать компонент TExcelApplication, доступный на Servers Page в Component Palette.

Совместимость: Delphi (5.x или выше)

На форме находится TStringGrid, заполненный некоторыми данными и две кнопки, с названиями To Excel и From Excel. Так же на форме находится компонент TExcelApplication со свойством Name, содержащим XLApp и свойством ConnectKind, содержащим ckNewInstance.

Когда нам необходимо работать с Excel, то обычно мы открываем ExcelApplication, затем открываем WorkBook и в конце используем WorkSheet.

Итак, несомненный интерес представляет для нас листы (WorkSheets) в книге (WorkBook). Давайте посмотрим как всё это работает.

Посылка данных в Excel

Это можно сделать с помощью следующей процедуры :

procedure TForm1.BitBtnToExcelOnClick(Sender: TObject);
var
WorkBk : _WorkBook; //  определяем WorkBook
WorkSheet : _WorkSheet; //  определяем WorkSheet
I, J, K, R, C : Integer;
IIndex : OleVariant;
TabGrid : Variant;
begin
if GenericStringGrid.Cells[0,1] <> "" then
 begin
  IIndex := 1;
  R := GenericStringGrid.RowCount;
  C := GenericStringGrid.ColCount;
  // Создаём массив-матрицу
  TabGrid := VarArrayCreate([0,(R - 1),0,(C - 1)],VarOleStr);
  I := 0;
  //  Определяем цикл для заполнения массива-матрицы
  repeat
  for J := 0 to (C - 1) do
    TabGrid[I,J] := GenericStringGrid.Cells[J,I];
   Inc(I,1);
  until
   I > (R - 1);

  // Соединяемся с сервером TExcelApplication
  XLApp.Connect;
   // Добавляем WorkBooks в ExcelApplication
  XLApp.WorkBooks.Add(xlWBatWorkSheet,0);
  // Выбираем первую WorkBook
  WorkBk := XLApp.WorkBooks.Item[IIndex];
  // Определяем первый WorkSheet
  WorkSheet := WorkBk.WorkSheets.Get_Item(1) as _WorkSheet;
  // Сопоставляем Delphi массив-матрицу с матрицей в WorkSheet
  Worksheet.Range["A1",Worksheet.Cells.Item[R,C]].Value := TabGrid;
  // Заполняем свойства WorkSheet
  WorkSheet.Name := "Customers";
  Worksheet.Columns.Font.Bold := True;
  Worksheet.Columns.HorizontalAlignment := xlRight;
  WorkSheet.Columns.ColumnWidth := 14;
  // Заполняем всю первую колонку
  WorkSheet.Range["A" + IntToStr(1),"A" + IntToStr(R)].Font.Color := clBlue;
  WorkSheet.Range["A" + IntToStr(1),"A" + IntToStr(R)].HorizontalAlignment := xlHAlignLeft;
  WorkSheet.Range["A" + IntToStr(1),"A" + IntToStr(R)].ColumnWidth := 31;
  // Показываем Excel
  XLApp.Visible[0] := True;
  // Разрываем связь с сервером
  XLApp.Disconnect;
  // Unassign the Delphi Variant Matrix
  TabGrid := Unassigned;
 end;
end;

Получение данных из Excel

Это можно сделать с помощью следующей процедуры :
 
procedure TForm1.BitBtnFromExcelOnClick(Sender: TObject);
var
WorkBk : _WorkBook;
WorkSheet : _WorkSheet;
K, R, X, Y : Integer;
IIndex : OleVariant;
RangeMatrix : Variant;
NomFich : WideString;
begin
NomFich := ‘C:\MyDirectory\NameOfFile.xls’;
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), т.е. количество строк и количество
// столбцов, мы активируем его последнюю непустую ячейку
WorkSheet.Cells.SpecialCells(xlCellTypeLastCell,EmptyParam).Activate;
// Получаем значение последней строки
X := XLApp.ActiveCell.Row;
// Получаем значение последней колонки
Y := XLApp.ActiveCell.Column;
// Определяем количество колонок в TStringGrid
 GenericStringGrid.ColCount := Y;
// Сопоставляем матрицу WorkSheet с нашей Delphi матрицей
 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
     GenericStringGrid.Cells[(R - 1),(K - 1)] := RangeMatrix[K,R];
   Inc(K,1);
   GenericStringGrid.RowCount := K + 1;
 until
  K > X;
// Unassign the Delphi Variant Matrix
  RangeMatrix := Unassigned;
end;


2 Думкин:
Без обид.. просто так выразился... :)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.044 c
6-1079081830
Jaxtor
2004-03-12 11:57
2004.04.11
Отсылка сообщения через Outlook 2000 (COM)


1-1082628607
alextov
2004-04-22 14:10
2004.04.11
Нужно запустить ХП в отдельном потоке


14-1082402837
Gomosapin
2004-04-19 23:27
2004.04.11
Помогите решить простую задачу. Pascal


7-1080207035
Insert
2004-03-25 12:30
2004.04.11
Инфо о жестком диске


14-1081918872
New_user
2004-04-14 09:01
2004.04.11
Изменение работы кнопки "Пуск"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский