Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Работа с файлами в Delphi

Автор: vladk1973
Дата сообщения: 03.05.2005 06:15
Описание формата файла Excel (BIFF5) раньше можно было найти в MSDN
как щас, не знаю
Автор: Dim2004
Дата сообщения: 03.05.2005 13:01

Цитата:
Описание формата файла Excel (BIFF5) раньше можно было найти в MSDN

Идём на www.wotsit.org, ищем XLS, скачиваем "Microsoft Excel File Format (versions 2, 3, 4, 5, 95, 97, 2000, XP) [Daniel Rentz]", радуемся жизни .
Автор: Markell
Дата сообщения: 13.05.2005 15:05
Нужно найти подробное описание технологии COM. Может кто-нибудь подкинет ссылки, где это хорошо описано. Порылся в поисковиках - вариантов полно, но везде написано вкратце. А для меня самое главное - чтобы подробно было и объемно!!! .... для диплома надо.
Автор: krast
Дата сообщения: 13.05.2005 15:10
Markell
лучшие книги имхо:

1. Дональд Бокс. Сущность технологии СОМ. Это маст рид, если хотишь действительно понять почему COM таков какой он есть.

2. Дейл Роджерсон. Inside Com. Тож неплохая, фундаментальная книга

В этих книгах используется C++

3. Елманова, Трепалин, Тенцер "Delphi и COM"

книги есть в электронном виде, поищи... или в ПМ стучись - выложу куда-нить (третьей токо нет как ибукса)
Автор: wellwisher
Дата сообщения: 28.05.2005 20:47
Прошу прощения
Существуют ли какие нибудь компоненты Делфи для работы с OLE Compound files ?
http://www.newobjects.com/pages/ndl/StoragesAndFiles/SF-OLEFiles.htm - был, в принципе можно обойтись, но все таки ...
Автор: Markell
Дата сообщения: 06.06.2005 10:40
wellwisher


Цитата:
Существуют ли какие нибудь компоненты Делфи для работы с OLE Compound files ?

http://allrussweb.com.ru/delphi/tehnology/
Автор: batters
Дата сообщения: 18.06.2005 17:30
Всем привет!
у меня такая штука ...

У меня есть файл с записями...занашу их в Stringgrid, но он мне показывает в ячейке только первых 10 символов...
как мне разбить это сроку, находящуюся в ячейке... ну типа так:
пример:
// мама мыла раму
а чтобы в ячейке было так :
// мама мыла
// раму

HELP !
Автор: GrayElf
Дата сообщения: 20.06.2005 05:21
batters

Цитата:
но он мне показывает в ячейке только первых 10 символов...

может просто надо сделать ячейки пошире ?
А вообще, смотря как хочешь разбивать, если ровно по 10 символов, то что-то типа:

Код:
while length(s)>0 do
begin
stringgrid1.cells[0,i]:=copy(s,1,10);
delete(s,1,10);
inc(i)
end;
Автор: batters
Дата сообщения: 20.06.2005 19:26
Это конечно хорошо, но лудше, если мне разбить строку в столбец
Автор: ShIvADeSt
Дата сообщения: 21.06.2005 01:00
batters
Тогда единственный способ, в том случае если не найдешь аналогичный компонент с возвожностью переноса, это самому реализовать. Делается это следующим образом. В обработке события OnDrawCell определяешь если строка не вмещается в столбец, то делаешь разбиение на две и более строк и выводишь ее на канву грида в этом же событиии. В хелпе есть вывод на канву картинки, аналогично делается работа с текстом.

Цитата:

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; Col, Row: Longint; Rect: TRect; State: TGridDrawState);

var
index: integer;
begin
index := Row * DrawGrid1.ColCount + Col;
with Sender as TDrawGrid do
begin
Canvas.Brush.Color := clBackGround;
Canvas.FillRect(Rect);
ImageList1.Draw(Canvas,Rect.Left,Rect.Top,index);
if gdFocused in State then
Canvas.DrawFocusRect(Rect);
end;
end;

Автор: batters
Дата сообщения: 21.06.2005 12:41
спасибо!!
Автор: Markell
Дата сообщения: 26.02.2006 11:41

Цитата:
Код:

uses
ComObj;
function Xls_To_StringGrid(AGrid: TStringGrid; AXLSFile: 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(AXLSFile);
// Sheet := XLApp.Workbooks[1].WorkSheets[1];
Sheet := XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];
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);
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;

procedure TForm1.Button1Click(Sender: TObject);
begin
if Xls_To_StringGrid(StringGrid1, 'C:\All OLD\Мои документы\Розклад.xls') then
ShowMessage('Table has been exported!');
end;
    


----------


Не подскажите, как сделать аналогичные действия, но только под Windows Forms Application?
Автор: dyr farot
Дата сообщения: 27.02.2006 13:03
это под .NET имеется в виду?
тогда так:
http://www.rsdn.ru/article/dotnet/ExcelNELateBinding.xml
Автор: Markell
Дата сообщения: 27.02.2006 13:31
dyr farot
Большое спасибо! Попробую как там...
Автор: Pinocchio
Дата сообщения: 27.02.2006 15:05
Вообще то ADO (не помню точно провайдера), позволяет в простом DBGrid-е иметь, как msdе так и хls таблицу. Для xls нужно только объявить соответствующим образом колонки, и есть некоторые ограничения на правку.
Автор: onnenodur
Дата сообщения: 07.08.2006 09:01

Цитата:
Код:

uses
ComObj;
function Xls_To_StringGrid(AGrid: TStringGrid; AXLSFile: 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(AXLSFile);
// Sheet := XLApp.Workbooks[1].WorkSheets[1];
Sheet := XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];
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);
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;

procedure TForm1.Button1Click(Sender: TObject);
begin
if Xls_To_StringGrid(StringGrid1, 'C:\All OLD\Мои документы\Розклад.xls') then
ShowMessage('Table has been exported!');
end;


здраствуйте, не мог бы мне кто подсказать, я пытаюсь открыть фаил с помощью этого кода и вылазиет сообщение "Данные в буфере обмена не совпадают по размеру и ворме с выделенной областью. Вставить данные не зависимо от этого?", нажимаю "ОК", тут вылазиет окошко "Microsoft Visual Basic" в котором написано "Run-time error '1004' Изменить часть объедененной ячейки не возможно." и 4 кнопки: continue(неактивна), end, debug и help, нажимаю end и у меня на форме появляется пустой stringgrid, если нажимаю debug, появлятся какой-то код с выделенной вот этой строчкой

"'***********************************************************
' ВСТАВИМ ТЕКСТ ИЗ БУФЕРА ОБМЕНА НАЧИНАЯ С 1-ОЙ ЯЧЕЙКИ
'***********************************************************
Range("A1").Select
ActiveSheet.PasteSpecial Format:="Текст", Link:=False, DisplayAsIcon:= _
False"

подскажите че мне делать :'(
Автор: Hardip
Дата сообщения: 14.03.2008 16:52
Народ, а кто знает как в этот код


Код:
if Xls_To_StringGrid(StringGrid1, 'Место хранения файла') then
ShowMessage('Table has been exported!');
Автор: akaGM
Дата сообщения: 14.03.2008 17:02
Hardip

Код:
if opendialog.execute then
StringGrid1.rows.loadfromfile(opendialog.filename)
Автор: Hardip
Дата сообщения: 14.03.2008 18:20
akaGM


Цитата:
if opendialog.execute then
StringGrid1.rows.loadfromfile(opendialog.filename)


Я думал об этом и пробывал. Не работает, пишет - Record, object or class type required. Осанавливается после row. Думаю должен быть ещё какой - то параметр, ведь row - это только строка.

Автор: akaGM
Дата сообщения: 14.03.2008 18:24
Hardip

блин...

Код:
if opendialog.execute then
if Xls_To_StringGrid(StringGrid1, opendialog.filename) then
ShowMessage('Table has been exported!');
Автор: Hardip
Дата сообщения: 14.03.2008 18:33
akaGM

Великолепно! Не думал что можно оставить вот так
Код: (StringGrid1, opendialog.filename)
Автор: Hardip
Дата сообщения: 20.03.2008 15:37
Привет всем! Создаю базу данных в Delphi 7 (paradox). В программе есть несколько форм, на которых расположенны базы данных DBGrid. У каждой быз данных отдельный файл .db . В каждой базе поля одинаковые (например кол-во, сумма), но значения в для этих полей разные. На главной форме должна быть общая база. Нужно, к примеру, ячейку A(2,5) на форме t1 просуммировать с ячейкой A(2,5) на форме t2 и A(2,5) на форме t3 и вывести результат суммы на главную форму в ячейку A(2,5). Каким образом это реализовать?
Автор: Tantos
Дата сообщения: 21.03.2008 03:06
Hardip
Начни с изучения основ БД. Обычно подобное делается SQL-запросом. В принципе, можно использовать методы First+MoveBy у датасета для перехода на необходимую строку(запись), FieldByName для получения. И вносить все это дело в StringGrid. Но уж очень это неэффективно и коряво!
Автор: HellChild
Дата сообщения: 23.03.2008 21:45
Подскажите пожалуйста. Как правильно привязывать файл в коде к конкретному файлу Винды? Как обратиться при помощи "Heandle"?
Автор: Tantos
Дата сообщения: 24.03.2008 04:46
HellChild
1. Что-то я не понял, что ты хочешь... Это:

Код:
AnsiString asStr("");
asStr = "C:\\Windows\\file.ext";
Автор: HellChild
Дата сообщения: 24.03.2008 17:34
Потом контекст напишу щас не опмню.
Простовинда ошибку выдаёт когда открываешь файл. Пишет ошибка времени открытия файла.
Автор: Tantos
Дата сообщения: 25.03.2008 03:59
HellChild
Код открытия в студию!
Автор: SerK13
Дата сообщения: 26.03.2008 23:32
Здравствуйте.

Подскажите пожалуйста, как мне сделать считывание из файла xls ? чтоб заполнялось в ячейки stringgrid с последующей сортировкой...?

Т.е. Я выбираю файд xls на компе, и он заполняется в ячейки stringgrid..

Как такое сделать?
Спасибо.
Автор: Tantos
Дата сообщения: 27.03.2008 03:09
SerK13
Поищи по OLE информацию.
Автор: HellChild
Дата сообщения: 07.04.2008 17:49
Давно не занимался. Запамятовал. Подскажите пожалуйста рабочий код создания и открытия файла для последующей записи.
P S
Не посылайте очень далеко, заранее благодарен.

Страницы: 123

Предыдущая тема: ??? Скрипт vbs отправки файла по почте ???


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.