Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вопрос по Excel / 5 сообщений из 5, страница 1 из 1
19.11.2003, 08:10
    #32328126
chkalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Excel
Есть ли функция для программного открытия текстового файла и преобразования его в таблицу (разделитель - пробел, табуляция), вообщем подобное мастеру текстов
...
Рейтинг: 0 / 0
19.11.2003, 08:35
    #32328141
chkalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Excel
Функция -то такая есть (я нашел уже), но она открывает и новый документ, а как сделать чтобы открывался новый лист, а не документ?
...
Рейтинг: 0 / 0
19.11.2003, 13:21
    #32328622
ZrenBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Excel
Например так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
procedure U_PasteFromFile(WSheet:Variant; Range:Variant; FileName:String);
var hMem  : THandle;
    hFile : THandle;
    nSize : Integer;
    P     : PChar;
begin
  hFile := FileOpen(FileName,fmOpenRead);
  try
    nSize := FileSeek(hFile, 0 , 2 );
    FileSeek(hFile, 0 , 0 );
    hMem := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, nSize+ 1 );
    try
      P := GlobalLock(hMem);
      try
        nSize := FileRead(hFile,P^,nSize); P[nSize] := # 0 ;
        OpenClipboard( 0 );
        try
          EmptyClipboard;
          SetClipBoardData(Windows.CF_TEXT, hMem);
        finally
          CloseClipBoard;
        end;
      finally
        GlobalUnLock(hMem);
      end;
    finally
      GlobalFree(hMem);
    end;
  finally
    FileClose(hFile);
  end;

  try
    WSheet.Select;
    Range.Select;
    WSheet.PasteSpecial(Windows.CF_TEXT);
    Range.Select;
  except end;

  OpenClipboard( 0 );
  try
    EmptyClipboard;
  finally
    CloseClipboard;
  end;
end;

Код: plaintext
1.
2.
3.
4.
5.
6.
 . . .
    WSheet := MSExcel.ActiveWorkBook.WorkSheets.Add;

    U_PasteFromFile(WSheet,WSheet.Range['A1'],sFile1);
    U_PasteFromFile(WSheet,WSheet.Range['A'+IntToStr(nPos+ 2 )],sFile2);
 . . .
...
Рейтинг: 0 / 0
19.11.2003, 13:39
    #32328661
Processor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Excel
Чаще всего импортированный текстовый файл нуждается в доработке напильником. Кроме того, корешок листа (Worksheets(1).Name) называется так же, как и исходный файл.
После доработки лист копируешь в нужное место имеющейся книги:
а) проверяешь на несовпадение имени вставляемого листа с именами листов целевой книги;
б) выполняешь код:
Код: plaintext
wbS.Sheets( 1 ).Copy After:=wbD.Sheets(i)

где:
wbS - книга с импортированным (текстовым) файлом. Содержит 1 лист;
wbD - целевая книга;
i - номер листа в целевой книге, после (After) которого (или перед - тогда, соответственно, Before) надо вставить исходный лист.
Вариант .Move не проходит: в книге д.б. по крайней мере один лист;
в) закрываешь wbS БЕЗ СОХРАНЕНИЯ.
...
Рейтинг: 0 / 0
20.11.2003, 13:59
    #32330105
chkalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по Excel
Thanks very much
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вопрос по Excel / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]