Вверх ↑
Ответов: 321
Рейтинг: 10
#1: 2019-02-25 21:38:45 ЛС | профиль | цитата
andrestudio, спасибо большое, еще не тестировал, но все же.
Посмотрите пожалуйста правильно ли я сделал сохранение .xls файлов из StrList, на основе вашего пример ?!

Add(MainForm,2953706,553,224)
{
Width=464
Height=302
}
Add(Edit,8673961,952,434)
{
Left=95
Top=10
Width=180
Text="Demo1.xls"
}
Add(Button,3544816,728,490)
{
Left=70
Top=100
Width=260
Height=25
Caption="Auto creator data file"
link(onClick,6665458:doEvent1,[])
}
Add(InlineCode,14243757,987,490)
{
WorkPoints=#28:doCreateXLS=Создаёт файл XLS|49:doCloseXLS=Закрывает файл после добавления данных|76:doAddData=Добавляет данные в таблицу согластно типа данных (данные в потоке)|
EventPoints=#5:onErr|
DataPoints=#22:FileName=Имя файла XLS|16:Row=Номер строки|17:Col=Номер колонки|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|3: |0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|3: |21: FStream: PStream;|17: fname:string;|23: FileName:THI_Event;|18: Col:THI_Event;|18: Row:THI_Event;|20: onErr:THI_Event;|3: |72: procedure XlsBeginStream(var XlsStream: PStream; BuildNumber: Word);|47: procedure XlsEndStream(XlsStream: PStream);|53: procedure XlsWriteInteger(var XlsStream: PStream;|51: ACol, ARow: Word;|51: AValue: Integer);|50: procedure XlsWriteReal(var XlsStream: PStream;|48: ACol, ARow: Word;|47: AValue: Double);|0:|52: procedure XlsWriteString(var XlsStream: PStream;|50: ACol, ARow: Word;|52: AValue: string); |3: |50: procedure doCreateXLS(var dt:TData; idx:word);|49: procedure doCloseXLS(var dt:TData; idx:word);|48: procedure doAdddata(var dt:TData; idx:word);|0:|5: end;|0:|14:implementation|0:|3:var|58: CXlsBof: array[0..5] of Word = ($809, 8, 00, $10, 0, 0);|43: CXlsEof: array[0..1] of Word = ($0A, 00);|57: CXlsLabel: array[0..5] of Word = ($204, 0, 0, 0, 0, 0);|56: CXlsNumber: array[0..4] of Word = ($203, 14, 0, 0, 0);|52: CXlsRk: array[0..4] of Word = ($27E, 10, 0, 0, 0);|6: |37:procedure THiAsmClass.XlsBeginStream;|5:begin|28: CXlsBof[4] := BuildNumber;|44: XlsStream.Write(CXlsBof, SizeOf(CXlsBof));|4:end;|0:|35:procedure THiAsmClass.XlsEndStream;|5:begin|44: XlsStream.Write(CXlsEof, SizeOf(CXlsEof));|4:end;|0:|38:procedure THiAsmClass.XlsWriteInteger;|15:var V: Integer;|5:begin|20: CXlsRk[2] := ARow;|20: CXlsRk[3] := ACol;|42: XlsStream.Write(CXlsRk, SizeOf(CXlsRk));|27: V := (AValue shl 2) or 2;|24: XlsStream.Write(V, 4);|4:end;|0:|35:procedure THiAsmClass.XlsWriteReal;|5:begin|24: CXlsNumber[2] := ARow;|24: CXlsNumber[3] := ACol;|50: XlsStream.Write(CXlsNumber, SizeOf(CXlsNumber));|42: XlsStream.Write(AValue, SizeOf(Double));|4:end;|0:|37:procedure THiAsmClass.XlsWriteString;|12:var L: Word;|5:begin|22: L := Length(AValue);|24: CXlsLabel[1] := 8 + L;|23: CXlsLabel[2] := ARow;|23: CXlsLabel[3] := ACol;|20: CXlsLabel[5] := L;|48: XlsStream.Write(CXlsLabel, SizeOf(CXlsLabel));|39: XlsStream.Write(Pointer(AValue)^, L);|4:end;|0:|34:procedure THiAsmClass.doCreateXLS;|5:begin|50: fname := ReadString(dt,FileName, 'C:\Demo.xls');|39: FStream := NewWriteFileStream(fname);|29: XlsBeginStream(FStream, 0);|4:end;|0:|33:procedure THiAsmClass.doCloseXLS;|5:begin|24: XlsEndStream(FStream);|15: FStream.Free;|4:end;|0:|32:procedure THiAsmClass.doAdddata;|16:var stmp:string;|17: itmp:integer;|14: rtmp:real;|16: r,c:integer;|16: tmpdt:TData;|5:begin|34: r := ReadInteger(tmpdt, Row, 0);|34: c := ReadInteger(tmpdt, Col, 0);|22: case dt.Data_type of|20: data_str: begin|38: stmp := ToString(dt);|50: XlsWriteString(FStream,c,r,stmp);|19: end;|20: data_int: begin|39: itmp := ToInteger(dt);|51: XlsWriteInteger(FStream,c,r,itmp);|19: end;|20: data_real: begin|36: rtmp := ToReal(dt);|48: XlsWriteReal(FStream,c,r,rtmp);|19: end;|57: else _hi_onEvent(onErr, 'Error type add'); |6: end;|4:end;|0:|4:end.|
link(FileName,8673961:Text,[(993,478)(958,478)])
link(Row,13163180:Index,[(1000,426)(937,426)])
link(Col,8057329:NumSubStr,[(1007,426)(1070,426)])
}
Add(Hub,101109,875,497)
{
link(onEvent1,14243757:doCloseXLS,[])
link(onEvent2,12326381:doMessage,[])
}
Add(Hub,6665458,791,490)
{
link(onEvent1,14243757:doCreateXLS,[])
link(onEvent2,13163180:doEnum,[(827,503)(827,335)])
}
Add(Message,12326381,917,504)
{
Message="End create file"
}
Add(Str_Enum,8057329,1064,329)
{
From=0
To=3
link(onEnum,14243757:doAddData,[(1118,335)(1118,547)(975,547)(975,510)])
}
Add(StrList,1942388,910,280)
{
Strings=#26:Привет 1;Привет 2;Привет 3|26:Привет 4;Привет 5;Привет 6|26:Привет 7;Привет 8;Привет 9|
}
Add(ArrayEnum,13163180,924,329)
{
link(onItem,8057329:doEnum,[])
link(onEndEnum,101109:doEvent1,[(968,342)(968,394)(863,394)(863,503)])
link(Array,1942388:Array,[])
}


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

Извиняюсь по поводу защищенного файла, это в excel настроить можно, но вот проблема так и осталась с сохранением в ячейку многострочного большого текста.
карма: 1

0
Редактировалось 1 раз(а), последний 2019-02-25 22:39:51