Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> *.xls -> StringGrid 
:(
    Опции темы
mvdr
Дата 5.1.2006, 06:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: нет
Всего: 42



Что называется - туплю.
Подскажите, люди добрые (и злые), как Excel'евский файл открыть в StringGrid'e?


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Guedda
Дата 5.1.2006, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: нет
Всего: 78



Вот:
Код

uses
  ComObj;
...

function ExcelTableToStringGrid(_Grid : TStringGrid; ExcelFile : string) : boolean;
const
  xlCellTypeLastCell = $0000000B;
var
  XLApp, Sheet: OLEVariant;
  RangeMatrix: Variant;
  x, y, k, r: Integer;
begin
  Result := False;
  XLApp := CreateOleObject('Excel.Application');
  try
    XLApp.Visible := False;
    XLApp.Workbooks.Open(ExcelFile);
    Sheet := XLApp.Workbooks[ExtractFileName(ExcelFile)].WorkSheets[1];
    Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
    x := XLApp.ActiveCell.Row;
    y := XLApp.ActiveCell.Column;
    _Grid.RowCount := x;
    _Grid.ColCount := y;
    RangeMatrix := XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;
    k := 1;
    repeat
      for r := 1 to y do
        _Grid.Cells[(r - 1), (k - 1)] := RangeMatrix[K, R];
      Inc(k, 1);
      _Grid.RowCount := k + 1;
    until k > x;
    RangeMatrix := Unassigned;
  finally
    if not VarIsEmpty(XLApp) then
    begin
      XLApp.Quit;
      XLAPP := Unassigned;
      Sheet := Unassigned;
      Result := True;
    end;
  end;
end;

У меня все работает.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
mvdr
Дата 6.1.2006, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: нет
Всего: 42



хорошо, завтра с работы проверю, Только не понял, откуда сам excel файл берется? Как его загрузить сдиска?


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Albinos_x
Дата 6.1.2006, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



Цитата(mvdr @ 6.1.2006, 10:40 Найти цитируемый пост)

хорошо, завтра с работы проверю, Только не понял, откуда сам excel файл берется? Как его загрузить сдиска?

Код
...
{_Grid - таблица типа TStringGrid в которую переносим даные
ExcelFile - путь имя к Excel файлу}
function ExcelTableToStringGrid(_Grid : TStringGrid; ExcelFile : string) : boolean;    
const    
  xlCellTypeLastCell = $0000000B;    
var    
  XLApp, Sheet: OLEVariant;    
  RangeMatrix: Variant;    
  x, y, k, r: Integer;    
begin    
  Result := False;    
  // создаём/открываем Excel
  XLApp := CreateOleObject('Excel.Application');    
  try    
    // делаем невидимым
    XLApp.Visible := False;    
    // открываем файл
    XLApp.Workbooks.Open(ExcelFile);    
...



почитай вот здесь я писал, может ещё чего интересного найдёшь


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
mvdr
Дата 7.1.2006, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: нет
Всего: 42



"Метод Activate из класса Range завершен не корректно"
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, Buttons, ExtCtrls, ShellAPI, ComObj, Grids,
  OleCtnrs, ActnMan, ActnColorMaps;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    BitBtn1: TBitBtn;
    XPColorMap1: TXPColorMap;
    OleContainer1: TOleContainer;
    procedure BitBtn1Click(Sender: TObject);

 
   private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
  
function ExcelTableToStringGrid(_Grid : TStringGrid; ExcelFile : string) : boolean;
const
  xlCellTypeLastCell = $0000000B;
var
  XLApp, Sheet: OLEVariant;
  RangeMatrix: Variant;
  x, y, k, r: Integer;
begin
  Result := False;
  XLApp := CreateOleObject('Excel.Application');
  try
    XLApp.Visible := False;
    XLApp.Workbooks.Open(ExcelFile);
    Sheet := XLApp.Workbooks[ExtractFileName(ExcelFile)].WorkSheets[1];
    [color=red]Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;[/color]
    x := XLApp.ActiveCell.Row;
    y := XLApp.ActiveCell.Column;
    _Grid.RowCount := x;
    _Grid.ColCount := y;
    RangeMatrix := XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;
    k := 1;
    repeat
      for r := 1 to y do
        _Grid.Cells[(r - 1), (k - 1)] := RangeMatrix[K, R];
      Inc(k, 1);
      _Grid.RowCount := k + 1;
    until k > x;
    RangeMatrix := Unassigned;
  finally
    if not VarIsEmpty(XLApp) then
    begin
      XLApp.Quit;
      XLAPP := Unassigned;
      Sheet := Unassigned;
      Result := True;
    end;
  end;
end;

Добавлено @ 19:04
Код

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 ExcelTableToStringGrid(StringGrid1,'C:\documents and Settings\vova\Desktop\proba.xls');
end;



--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Albinos_x
Дата 7.1.2006, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



попробуй этот код:
Код

procedure TForm1.Button1Click(Sender: TObject); 
var V:OleVariant; 
     x, y, k, r: Integer;
begin 
if OpenDialog1.Execute then 
  begin 
  // запускаем Excel 
  ExcelApplication1.AutoConnect:=true; 
  // открываем книгу 
  ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.OpenXML(OpenDialog1.FileName,EmptyParam)); 
  // соединяемся с книгой 
  ExcelApplication1.ConnectTo(ExcelWorkbook1.Application); 
  ExcelWorksheet1.ConnectTo(ExcelWorkbook1.ActiveSheet as ExcelWorksheet); 
  // делаем невидимым Excel 
  ExcelApplication1.Visible[0]:=false; 
  // узнаём количество строк:
  ExcelWorksheet1.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate; 
  r:=ExcelApplication1.ActiveCell.Row;
  // считываем ячейки 
  for k:=1 to r do
     begin
     v:=ExcelWorksheet1.Range['A'+inttostr(k),EmptyParam]; 
    // записываем в таблицу  
    Table.Cells[1,k]:=V;   
    end;
  // выходим из Excel 
  ExcelApplication1.Quit; 
  end; 
end; 
...


кинь на форму соответствующие компаненты, Table - это StringGrid
код должен прочитать столбез А из екселя и занести его в таблицу StringGrid
PS: Код не проверял, могут быть ошибки


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
mr_tg
Дата 3.5.2013, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



Искал  Excel'евский файл открыть в StringGrid'e
нашол  вашу тему, 
подгонял код Albinos_x под свой,
Код

 ExcelWorksheet1.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate; 
  r:=ExcelApplication1.ActiveCell.Row;
  // считываем ячейки
 StringGrid1.RowCount:=r;
  StringGrid1.ColCount:=25;
  for k:=4 to StringGrid1.RowCount do
     begin
      Ch := 'A';
      for i:=0 to StringGrid1.ColCount do
        begin
         v:=ExcelWorksheet1.Range[Ch+inttostr(k),EmptyParam];
         Inc(Ch);
         // записываем в таблицу
         StringGrid1.Cells[i,k-4]:=V;
        end;

работает

но вопрос а что если столбцов много в Excel неподскажете?  число столбчов болше >100  (столбцы 'AB' 'AD' 'BD'....)

Albinos_x работа  "Работа с MS Excel и Word"  мне очен нравита помагает каждый раз.

Это сообщение отредактировал(а) mr_tg - 3.5.2013, 14:18
PM MAIL   Вверх
Albinos_x
Дата 23.7.2013, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



mr_tg
Доброе время суток.

Извините что долго не отвечал, только сейчас заметил, что вы мне письмо написали.

в топике, про который вы написали я давал код функции, которая по номеру определяет порядок сочетания букв
непосредственная ссылка на пост:
http://forum.vingrad.ru/index.php?showtopi...st&p=651663

код самой функции:
Код

...
// организую адресацию по столбцам в Excel
function AddresColExcel(const Num:word):string;
var len, N:word;
ch:string;
begin
N:=Num;
ch:=char(ord('A')+(Num mod 26));
N:=N div 26;
while N<>0 do
begin
len:=Length(ch)+1;
SetLength(ch,Len);
ch[len]:=char(ord('A')+(N mod 26)-1);
N:=N div 26;
end;
len:=Length(ch);
SetLength(Result,len);
for n:=1 to len do
Result[n]:=ch[len+1-n];
end;
...


не забывайте что в office XP, 2003, 2000 только 255 столбцов

также если обращаться к ячейке через метод cells то можно указывать напрямую цифрами...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.1553 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.