Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2011, 12:54   #1
SPD
Пользователь
 
Регистрация: 30.11.2009
Сообщений: 41
Печаль c Excel в StringGrid

Частенько использую в своей роботе и в своих программах считывание с Excel с одним листом в StringGrid, но тут пере до мною постала задача считать с Excel в StringGrid...Но в Excel несколько листов...Для считывания одного листа я использую всегда вот эту функцию. Помогите пожалуйста переделать ее под несколько листов если это реально...

Листы должны считываться в разные StringGrid...

Код:
function xls_to_stringgrid(agrid: tstringgrid; Sheet1: string): boolean;
const
xlcelltypelastcell = $0000000b;
var
xlapp, sheet: olevariant;
rangematrix: variant;
x, y, k, r: integer;
begin
//axlsfile:='Аркуш1';
result := false;
// створити excel-ole object
xlapp := createoleobject('excel.application');
try
// скрыть excel
xlapp.visible := false;

// Открыть workbook
xlapp.workbooks.open(Sheet1);

// sheet := xlapp.workbooks[1].worksheets[1];
sheet := xlapp.workbooks[extractfilename(Sheet1)].worksheets[1];

// in order to know the dimension of the worksheet, i.e the number of rows
// and the number of columns, we activate the last non-empty cell of it

sheet.cells.specialcells(xlcelltypelastcell, emptyparam).activate;
// get the value of the last row
x := xlapp.activecell.row;
// get the value of the last column
y := xlapp.activecell.column;

// set stringgrid's row &col dimensions.

agrid.rowcount := x;
agrid.colcount := y;

// assign the variant associated with the worksheet to the delphi variant

rangematrix := xlapp.range['a1', xlapp.cells.item[x, y]].value;
// define the loop for filling in the tstringgrid
k := 1;
repeat
for r := 1 to y do
agrid.cells[(r - 1), (k - 1)] := rangematrix[k, r];
inc(k, 1);
agrid.rowcount := k + 1;
until k > x;
// unassign the delphi variant matrix
rangematrix := unassigned;

finally
// Выйти с excel
if not varisempty(xlapp) then
begin
// xlapp.displayalerts := false;
xlapp.quit;
xlapp := unassigned;
sheet := unassigned;
result := true;
end; end; end;

xls_to_stringgrid(stringgrid1, Opendialog1.FileName)
SPD вне форума Ответить с цитированием
Старый 17.11.2011, 12:58   #2
g101k
 
Регистрация: 17.11.2011
Сообщений: 8
По умолчанию

Ну если у тебя работает твой код, тогда вот
Код:
function Xls_To_StringGrid(AGrid: TStringGrid; AXLSFile: string; SheelIndex: Integer): 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(AXLSFile);
    Sheet := XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[SheelIndex];
    Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate; // вообще можно юзать $b или 11
    x := XLApp.ActiveCell.Row;
    y := XLApp.ActiveCell.Column;
    AGrid.RowCount := x;
    AGrid.ColCount := y;
    RangeMatrix := XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;
    k := 1;
    repeat
      for r := 1 to y do
        AGrid.Cells[(r - 1), (k - 1)] := RangeMatrix[K, R];
      Inc(k, 1);
      AGrid.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;

xls_to_stringgrid(agrid, 'C:\1.xls', 1); // для первой страницы
xls_to_stringgrid(agrid, 'C:\1.xls', 2); // для второй страницы
xls_to_stringgrid(agrid, 'C:\1.xls', 3); // для третей страницы

Последний раз редактировалось g101k; 17.11.2011 в 13:19. Причина: Коменты дописал
g101k вне форума Ответить с цитированием
Старый 21.11.2011, 13:36   #3
SPD
Пользователь
 
Регистрация: 30.11.2009
Сообщений: 41
По умолчанию

вот чтот не хочет пахать выдает такие ошибки...(((

посмотри пож....

Код:
Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate; // вообще можно юзать $b или 11
вот на етом ошибку выдает....
Изображения
Тип файла: jpg 123.JPG (27.3 Кб, 234 просмотров)
SPD вне форума Ответить с цитированием
Старый 21.11.2011, 14:31   #4
SPD
Пользователь
 
Регистрация: 30.11.2009
Сообщений: 41
По умолчанию

Все переделал вот получилось как то так....

Код:
function Xls_To_StringGrid(AGrid: TStringGrid; AXLSFile: string;SheetNum:integer): 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(AXLSFile);
     // Sheet := XLApp.Workbooks[1].WorkSheets[1];
     Sheet := XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[SheetNum];
     Sheet.activate;
     Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
     x := XLApp.ActiveCell.Row;
     y := XLApp.ActiveCell.Column;
     AGrid.RowCount := x;
     AGrid.ColCount := y;
     RangeMatrix := XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;
     k := 1;
     repeat
       for r := 1 to y do
         AGrid.Cells[(r - 1), (k - 1)] := RangeMatrix[K, R];
       Inc(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;

xls_to_stringgrid(stringgrid1, 'C:\1.xls', 1);
xls_to_stringgrid(stringgrid2, 'C:\1.xls', 2);
xls_to_stringgrid(stringgrid3, 'C:\1.xls', 3);
SPD вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод StringGrid в Excel. Asblue Помощь студентам 0 01.11.2010 19:11
StringGrid и MS Excel ChEaTeR-abc Помощь студентам 1 05.07.2010 09:04
из StringGrid в Excel artemavd Общие вопросы Delphi 6 24.07.2008 18:14
Excel и StringGrid... Roof Общие вопросы Delphi 2 18.09.2007 17:07
Excel и StringGrid apx_angel Компоненты Delphi 2 20.02.2007 00:20