Вверх ↑
Этот топик читают: Гость
Ответов: 8338
Рейтинг: 775
#16: 2019-02-26 00:07:11 ЛС | профиль | цитата
Master4eG, а пробовали ручками скопипастить в ячейку, ранее был максимум 256 символов, обрабатываемых формулами, сейчас не знаю, но ограничение наверное тоже есть
МногоСтрок759символов.jpg
карма: 14

0
Ответов: 294
Рейтинг: 4
#17: 2019-02-26 00:11:34 ЛС | профиль | цитата
Леонид, ограничения я здесь читал https://support.office.com/ru-ru/article/Технические-характеристики-и-ограничения-microsoft-excel-1672b34d-7043-467e-8e27-269d656771c3.
То есть вы хотите сказать, что я могу только 256 символов вставить ?!
А каким методом вы это сделали ?!

Редактировалось 1 раз(а), последний 2019-02-26 00:15:16
карма: 0

0
Ответов: 312
Рейтинг: 5
#18: 2019-02-26 01:05:37 ЛС | профиль | цитата
Скрипт от Леонида отлично записывает длинный текст в .xlsx

Add(MainForm,9161318,525,238)
{
Width=1184
Height=246
Caption="In_Out_Excel"
Point(onClose)
link(onClose,604810:doCompare,[])
}
Add(LED,1408573,574,189)
{
Left=85
Top=5
}
Add(IndexToChanel,4742625,525,196)
{
link(onEvent1,1408573:doOff,[])
link(onEvent2,1408573:doOn,[])
}
Add(Button,11796961,315,49)
{
Left=5
Top=10
Width=65
Caption="Open Excel"
link(onClick,420540:doExecute,[])
}
Add(Button,12390211,406,168)
{
Left=10
Top=40
Caption="Close"
link(onClick,13900935:doWork2,[])
}
Add(Hub,9982022,413,49)
{
link(onEvent1,10946710:doClear,[(517,55)(517,76)])
link(onEvent2,10692435:doOpen,[(438,62)(438,139)])
}
Add(ODialog,420540,364,49)
{
Filter="Excel(.xls,.xlsx)|*.xls;*.xlsx"
link(onExecute,9982022:doEvent1,[])
}
Add(ComboBox,10946710,525,63)
{
Left=120
Top=10
Width=140
Height=21
Text="Выбрать лист"
DataType=1
Point(doSelect)
link(onClick,10692435:doSheet,[(564,76)(564,125)(445,125)(445,160)])
}
Add(If_else,11782534,469,63)
{
Type=5
Op2=Integer(0)
link(onTrue,10946710:doAdd,[])
link(onFalse,10946710:doSelect,[(513,76)(513,97)])
}
Add(Button,14425351,217,231)
{
Left=10
Top=80
Caption="Read"
link(onClick,469012:doString,[])
}
Add(Edit,5305046,231,182)
{
Left=75
Top=80
Text="2"
DataType=2
}
Add(Label,4501845,231,49)
{
Left=90
Top=60
Caption="Row"
}
Add(Label,613563,273,49)
{
Left=135
Top=60
Width=39
Height=17
Caption="Column"
}
Add(Edit,16579324,273,182)
{
Left=130
Top=80
Text="1"
DataType=2
}
Add(FormatStr,469012,266,231)
{
Mask="%1;%2"
link(onFString,10692435:doRead,[(382,237)(382,153)])
link(Str1,5305046:Text,[(272,222)(237,222)])
link(Str2,16579324:Text,[])
}
Add(Button,8636081,217,140)
{
Left=10
Top=110
Font=[MS Sans Serif,8,0,255,1]
Caption="Write"
link(onClick,1368601:doString,[])
}
Add(Edit,663925,231,91)
{
Left=75
Top=110
Text="2"
DataType=2
}
Add(Edit,10420173,273,91)
{
Left=130
Top=110
Text="1"
DataType=2
}
Add(FormatStr,1368601,266,140)
{
DataCount=3
Mask="%1;%2;%3"
link(onFString,10692435:doWrite,[])
link(Str1,663925:Text,[(272,135)(237,135)])
link(Str2,10420173:Text,[])
link(Str3,1032761:Text,[(286,132)(328,132)])
}
Add(VBJScript,10692435,469,133)
{
@Hint=#16:Query SQL Server|
WorkPoints=#6:doOpen|7:doWrite|6:doRead|7:doSheet|7:doMacro|7:doClose|
EventPoints=#6:onShet|7:onMacro|7:onCells|6:onOpen|
Script=#9:Dim strIn|10:Dim strOut|10:Dim NumRow|10:Dim NumCol|5:Dim i|5:Dim j|12:Dim objExcel|0:|22:Sub doWork(Data,Index)|18: Select Case Index|103: Case "doOpen" 'На вход подаётся строка, содержащая полный путь к файлу|52: Set objExcel = CreateObject("Excel.Application")|52: Set objWorkbook = objExcel.Workbooks.Open (Data)|82: For i=1 To objWorkbook.Sheets.Count 'Листы начинаются не с "0", а с "1"|67: sys.onShet objWorkbook.Sheets(i).Name 'Выводим имя наружу |9: Next|74: 'j=objWorkbook.macro.Count 'Узнаём количество макросов|88: ' For i=1 To j 'Нумерация начинаются не с "0", а с "1" |79: ' strIn = objWorkbook.macro(i).Name 'Узнаём имя очередного макроса |67: ' sys.onMacro strIn 'Выводим имя наружу |15: ' Next |18: sys.onShet 0 |16: sys.onOpen 1|143: Case "doRead" 'На вход подаётся строка, содержащая (разделитель -- точка с запятой): НомерСтроки;НомерКолонки;|22: strIn = CStr(Data)|28: i = InStr(1,strIn,";",0)|37: NumRow = CLng(Mid(strIn, 1, i-1))|33: NumCol = CLng(Mid(strIn,i+1))|61: strOut = objExcel.ActiveSheet.Cells(NumRow, NumCol).Value|27: sys.onCells strOut |163: Case "doWrite" 'На вход подаётся строка, содержащая (разделитель -- точка с запятой): НомерСтроки;НомерКолонки;ЗаписываемоеЗначение|22: strIn = CStr(Data)|28: i = InStr(1,strIn,";",0)|37: NumRow = CLng(Mid(strIn, 1, i-1))|30: j = InStr(i+1,strIn,";",0)|41: NumCol = CLng(Mid(strIn, i+1, j-i-1))|28: strIn = Mid(strIn, j+1)|58: objExcel.ActiveSheet.Cells(NumRow, NumCol).Value=strIn|21: sys.onCells strIn|93: Case "doSheet" 'На вход подаётся строка, содержащая имя Листа|32: objExcel.Sheets(Data).Select|44: objExcel.ActiveSheet.Cells(1, 1).Select |95: Case "doMacro" 'На вход подаётся строка, содержащая имя Макроса|63: objExcel.Application.Run (Data) |19: 'sys.onMacro 1 |17: Case "doClose"|17: objExcel.Quit|26: Set objExcel = Nothing|20: sys.onOpen 0 |11: End Select|0:|7:End Sub|
UseName=0
link(onShet,11782534:doCompare,[(508,139)(508,118)(459,118)(459,69)])
link(onCells,3080051:doText,[])
link(onOpen,4742625:doEvent,[(513,160)(513,202)])
}
Add(If_else,604810,574,259)
{
Op2=Integer(1)
link(onTrue,13900935:doWork3,[(616,265)(616,301)(459,301)])
link(Op1,1408573:Value,[])
}
Add(HubEx,13900935,455,168)
{
link(onEvent,10692435:doClose,[])
}
Add(Edit,3080051,525,147)
{
Left=190
Top=80
Width=175
}
Add(Memo,1032761,322,91)
{
Left=380
Top=25
Width=635
Height=175
ScrollBars=2
}
Add(Label,836167,231,7)
{
Left=385
Top=5
Width=94
Height=22
Caption="Текст для записи"
}
карма: 2

0
Ответов: 8338
Рейтинг: 775
#19: 2019-02-26 09:51:31 ЛС | профиль | цитата
Master4eG писал(а):
А каким методом вы это сделали
Так написал же "ручками скопипастил" для проверки
Формула "ДЛСТР" работает, значит ограничение по формулам, если оно есть, более 759 символов
карма: 14

0
Ответов: 312
Рейтинг: 5
#20: 2019-02-26 10:40:27 ЛС | профиль | цитата
Леонид В .xlsx записывается вашим скриптом намного больше 759 символов. Несколько тысяч можно. А в .xls 256 символов, это ограничение Excel
карма: 2

0
Ответов: 4396
Рейтинг: 475
#21: 2019-02-26 15:49:20 ЛС | профиль | цитата
не знаю что и сказать
карма: 4

0
Ответов: 294
Рейтинг: 4
#22: 2019-02-27 01:54:37 ЛС | профиль | цитата
Sersey, спасибо за наводку . И Леонид, спасибо большое за сам скрипт, работает на ура с большими текстами, правда удобнее было бы, если бы индекс строк начинался с нуля, и точки были бы вверху. А совсем круто было бы, если бы была точка doCreateXLS, а сверху "name".
Вроде нашел как создавать файл, 5 строчек кода, но ума не хватает как объединить.
http://qaru.site/questions/856128/create-an-excel-file-using-vbscripts
БукАвки это уже не кубики соединять, не совсем моё

Редактировалось 1 раз(а), последний 2019-02-27 01:54:54
карма: 0

0
Ответов: 4396
Рейтинг: 475
#23: 2019-02-27 19:24:35 ЛС | профиль | цитата
Master4eG писал(а):
БукАвки это уже не кубики соединять, не совсем моё

когда научишься буковкам то откроешь Америку
Просто учитывай одно, скрипт Леонид(а) требует установленного офиса, мой IC делает бинарник простого экспорта в xls файл даже в чистой win-98, на основе его я сделал компонент на подобии ExportHTML. Но так как с иконкой никто помочь не вызвался то принципиально оставляю его себе.
карма: 4

0
Ответов: 294
Рейтинг: 4
#24: 2019-02-27 19:35:46 ЛС | профиль | цитата
andrestudio писал(а):
Но так как с иконкой никто помочь не вызвался то принципиально оставляю его себе.

Могу нарисовать, скажите что и как и сделаю, правда не разу для hiasm ничего не рисовал, но пару вариантов смогу показать.

Что я делаю не так ?!
Add(MainForm,11821139,735,301)
{
Width=464
Height=302
}
Add(Edit,8673961,812,385)
{
Left=95
Top=10
Width=180
Text="Demo1.xls"
}
Add(Button,3544816,588,441)
{
Left=70
Top=100
Width=260
Height=25
Caption="Auto creator data file"
link(onClick,6665458:doEvent1,[])
}
Add(InlineCode,14243757,847,441)
{
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(onErr,1231733:doMessage,[])
link(FileName,8673961:Text,[(853,429)(818,429)])
link(Row,751937:Var2,[])
link(Col,751937:Var3,[(867,425)])
}
Add(Hub,6665458,651,441)
{
OutCount=4
link(onEvent1,14243757:doCreateXLS,[])
link(onEvent2,13033422:doData,[(709,454)(709,356)])
link(onEvent3,14243757:doCloseXLS,[(756,461)(756,454)])
link(onEvent4,12326381:doMessage,[])
}
Add(Message,12326381,777,462)
{
Message="End create file"
}
Add(StrList,1942388,854,301)
{
Strings=#25:Строка для ячейки номер 1|25:Строка для ячейки номер 2|25:Строка для ячейки номер 3|25:Строка для ячейки номер 4|25:Строка для ячейки номер 5|25:Строка для ячейки номер 6|25:Строка для ячейки номер 7|25:Строка для ячейки номер 8|25:Строка для ячейки номер 9|26:Строка для ячейки номер 10|
}
Add(Memory,6490426,854,385)
{
Default=Integer(0)
}
Add(DoData,13033422,854,350)
{
Data=String(Строка для ячейки номер 1)
link(onEventData,14243757:doAddData,[(941,356)(941,488)(835,488)(835,461)])
link(Data,1942388:Text,[])
}
Add(Message,1231733,973,441)
{
}
Add(GetDataEx,751937,854,420)
{
link(Data,6490426:Value,[])
}


Результат, либо пустая форма, либо:




Типа такого ?! Можно внутри закрасить, вместо прозрачности.

Слишком тонкий какой-то, сейчас еще сделаю парочку.
Во вкладке "Инструменты" - "Конверторы" - есть TableToRTF, можно вместо RTF написать XLS и готово
Ну или что-то похожее нарисовать, фантазии не хватает чуток.

Вот толстый в интернете нашел, чуть переделал.
xls.ico


- этот на скриншете выше.
- это более широкий и чистый, думаю будет красивее, чем выше.

Редактировалось 8 раз(а), последний 2019-02-27 22:01:57
карма: 0

0
Ответов: 4396
Рейтинг: 475
#25: 2019-02-28 16:16:00 ЛС | профиль | цитата
Master4eG писал(а):
Что я делаю не так ?!

Ну что и сам ведь понимаешь наверно, вставляешь в ячейку несколько строк вместо одной допустимой. Это простой вывод без форматирования и всего прочего.
Вот тебе для вдохновения от моей землячки http://www.delphiplus.org/articles/interview/olga_sosonnykh.html значит и ты сможешь
карма: 4

0
Ответов: 114
Рейтинг: 2
#26: 2019-03-05 21:13:34 ЛС | профиль | цитата
я выгрузку делал по другому сначала выгружал из MTtable в текстовый файл. А потом этот файл открывал CALC опенофис ну или EXEL. и мне программ предлагала ввести символ разделитель или использовать стандартные. и вообще без проблем открывалась без потери форматирования!
карма: 0

0
26
Сообщение
...
Прикрепленные файлы
(файлы не залиты)