обработка Excel,сортировка столбцов

vanuna
Дата: 08.06.2009 11:29:19
Всем привет! Возникла задача. Есть папка с эксель-файлами. (В экселе - таблица(номер, статус, описание,...,дата,...,страна,...,план)) Надо написать прогу, которая обрабатывает файлы следующим образом: идет автоматическая загрузка автоматически сортирует 5ый столбец по дате, далее выясняется какая сегодня дата и все строчки, которые ниже сегодняшней даты - удаляются. Потом происходит сортировка списка в таблице по статусу(2ой столбец).
Подскажите, как подступиться к решению данной задачи. :wall: :wall: С экселем в Дельфи раньше не работал. Очень хочу научиться.
Джибс
Дата: 08.06.2009 11:33:29
работай через oledb/odbc
vanuna
Дата: 08.06.2009 11:38:57
а можно по подробнее...
Leo Pevzner
Дата: 08.06.2009 13:58:33
Так....легко подступиться.... начните с поиска, ну...скажем, по фразе Excel.Application
И дальше, выбираете вариант по вкусу, и начинаете изучать. Тема разобрана неоднократно, примеров - масса.
vanuna
Дата: 08.06.2009 14:04:21
Ура! кое-что удалось нарыть и даже понять как это работает)
     // ïîäêëþ÷åíèå
Form1.ExcelApplication1.ConnectKind := ckRunningOrNew;
FOrm1.ExcelApplication1.Connect;
Form1.ExcelApplication1.Visible[1] := True;
//FOrm1.ExcelApplication1.Workbooks.Add (EmptyParam,1);
Form1.ExcelApplication1.Workbooks.Add('c:\a.xls',0);
Form1.ExcelWorkbook1.ConnectTo(Form1.ExcelApplication1.ActiveWorkbook);
файл отлично загружается)) теперь надо сделать уделение 1ого столбца.
Соколинский Борис
Дата: 08.06.2009 18:37:35
vanuna
С экселем в Дельфи раньше не работал. Очень хочу научиться.
А Delphi здесь почти не нужен, все делается командами Excel-я: автофильтр и сортировка. Пишешь в Excel-е макрос и запускаешь его из своей программы.
vanuna
Дата: 08.06.2009 19:02:51
Соколинский Борис,
Никогда не писал макросы... если продемонстрируйте, то буду очень рад))

У меня получилось на дельфи навать...
var
  Form1: TForm1;
  Excel: Variant;
implementation
{$R *.dfm}
procedure TForm1.Button4Click(Sender: TObject);
begin
Excel := CreateOleObject('Excel.Application');
Excel.Workbooks.Open('c:\a.xls');    
Excel.Range['1:1', EmptyParam].EntireRow.Delete(xlShiftToLeft);     //удаляем стоку
Excel.Range['A1', EmptyParam].EntireColumn.Delete(xlShiftToLeft);  //удаляем стотбец
Excel.ActiveWorkbook.Close;
Excel.Application.Quit;
Excel.DisplayAlerts:=False;

end;
теперь надо упорядочить таблицу по дате по убыванию, и столбцы, дата которых ниже сегодняшней даты - удалить!
Соколинский Борис
Дата: 08.06.2009 19:09:10
vanuna
Соколинский Борис,
Никогда не писал макросы... если продемонстрируйте, то буду очень рад))
1. Пользуемся поиском
2. Выполняем "Данные" - "Автофильтр".
3. Выполняем "Данные" - "Сортировка".
vanuna
Дата: 08.06.2009 20:19:01
Соколинский Борис,
вот макроос.
Sub Ìàêðîñ1()
'
' Ìàêðîñ1 Ìàêðîñ
' Ìàêðîñ çàïèñàí 08.06.2009 
'

'
    Columns("A:A").Select
    Selection.Delete Shift:=xlToLeft
    Rows("1:1").Select
    Selection.Delete Shift:=xlUp
    Rows("2:2").Select
    Selection.Font.Bold = False
    Columns("I:I").Select
    Range("A1:J45").Sort Key1:=Range("I2"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortTextAsNumbers
End Sub

как теперь сказать дельфи, чтобы он его применил для обрабатываемого файла??
Соколинский Борис
Дата: 08.06.2009 20:30:48
Общая схема:
1. Сохрани документ с макросом как файл настройки (*.xla)
2. В процессе работы загрузи также как обрабатываемый файл.
3. В программе:
Excel.Run('Макрос1');