Вверх ↑
Этот топик читают: Гость
Ответов: 490
Рейтинг: 162
#46: 2019-09-20 17:20:02 ЛС | профиль | цитата
tig-rrr писал(а):
ВсЁ работало отлично

tig-rrr писал(а):
с латиницей "List2" -Всё ОК.

Это было Всё на секретном компиляторе.
на FPC никак не получается заставить работать, может кто подскажет какие другие варианты?
карма: 4

0
Главный модератор
Ответов: 2997
Рейтинг: 395
#47: 2019-09-20 19:27:29 ЛС | профиль | цитата
VisualStudio C# OleAutomation или Office SDK.
Автоматизация Microsoft Excel из Microsoft Visual C# .NET

Если не ищите лёгких путей, то можно использовать C# код в элементе HCInlineCode или VBScript код в элементе HCVBJScript проекта HiAsm.NET

Редактировалось 2 раз(а), последний 2019-09-20 21:05:43
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 263
Рейтинг: 18
#48: 2019-10-05 07:22:07 ЛС | профиль | цитата
Хочу поделиться опытом по отрисовке границ ячеек в Excel.
Схема


Add(MainForm,2953706,126,56)
{
Width=236
Height=260
Point(onClose)
link(onClose,8577920:doEvent,[])
}
Add(VBJScript,1688930,399,133)
{
@Hint=#16:Query SQL Server|
WorkPoints=#6:doOpen|6:doRead|7:doWrite|9:doBorderM|9:doBorderB|10:doSheetAdd|6:doAuto|7:doClose|
EventPoints=#6:onRead|7:onCells|7:onError|6:onOpen|
Script=#9:Dim strIn|10:Dim strOut|10:Dim NumRow|10:Dim NumCol|5:Dim i|5:Dim j|14:Dim MyArrays()|12:Dim objExcel|0:|22:Sub doWork(Data,Index)|18: Select Case Index|15: Case "doOpen"|52: Set objExcel = CreateObject("Excel.Application")|52: Set objWorkbook = objExcel.Workbooks.Open (Data)|92: For i=1 To objWorkbook.Sheets.Count 'Листы начинаются не с "0", а с "1"|78: sys.onRead objWorkbook.Sheets(i).Name 'Выводим имя наружу |9: Next|16: sys.onOpen 1|2: |162: 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|4: |142: 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|24: sys.onCells strOut |2: |18: Case "doBorderB"|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))|62: objExcel.ActiveSheet.Cells(NumRow, NumCol).borders.weight = 3|18: Case "doBorderM"|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))|63: objExcel.ActiveSheet.Cells(NumRow, NumCol).borders.weight = 2 |0:|19: Case "doSheetAdd"|34: objExcel.Sheets.Add.Name = (Data)|30: objExcel.Sheets(Data).Select |0:|16: Case "doClose"|32: objExcel.ActiveWorkbook.Save|34: objExcel.DisplayAlerts = False|17: objExcel.Quit|26: Set objExcel = Nothing|17: sys.onOpen 0 |15: Case "doAuto"|51: objExcel.ActiveSheet.Cells.EntireColumn.AutoFit |11: End Select|0:|7:End Sub|
UseName=0
link(onCells,1837466:doText,[])
link(onOpen,2707656:doValue,[])
}
Add(Button,14089438,189,133)
{
Left=15
Top=5
Width=90
Caption="Открыть файл"
Point(doEnabled)
link(onClick,1460896:doExecute,[])
}
Add(Button,7601295,189,182)
{
Left=115
Top=5
Width=90
Enabled=1
Caption="Закрыть файл"
Point(doEnabled)
link(onClick,13761980:doWork2,[])
}
Add(Button,11412585,161,406)
{
Left=15
Top=85
Width=75
Caption="Прочитать"
link(onClick,10256817:doString,[])
}
Add(ODialog,1460896,294,133)
{
link(onExecute,1688930:doOpen,[])
}
Add(Label,8462390,161,336)
{
Left=90
Top=35
Width=41
Height=17
Caption="Ячейка"
}
Add(Edit,13427898,217,336)
{
Left=85
Top=55
Width=20
Text="1"
DataType=1
}
Add(Edit,2198549,273,336)
{
Left=110
Top=55
Width=20
Text="1"
DataType=1
}
Add(Button,7273245,161,665)
{
Left=15
Top=115
Width=75
Caption="Записать"
link(onClick,3387319:doString,[])
}
Add(Label,1837466,630,140)
{
Left=100
Top=90
Width=104
Height=14
Caption=""
}
Add(Edit,2495151,322,588)
{
Left=95
Top=115
Width=110
Text=""
}
Add(Button,1610573,161,469)
{
Left=15
Top=145
Width=190
Caption="Установить тонкую рамку"
link(onClick,12410623:doString,[])
}
Add(Button,9828944,161,539)
{
Left=15
Top=170
Width=190
Caption="Установить толстую рамку"
link(onClick,701679:doString,[])
}
Add(Button,11471978,294,175)
{
Left=15
Top=195
Width=190
Caption="Авто ширина колонок"
link(onClick,1688930:doAuto,[])
}
Add(FormatStr,10256817,301,406)
{
Mask="%1;%2"
link(onFString,1688930:doRead,[(346,412)(346,146)])
link(Str1,14983907:Var3,[(307,389)])
link(Str2,1939962:Var3,[(314,380)])
}
Add(ChanelToIndex,13577073,126,182)
{
link(onIndex,7601295:doEnabled,[])
}
Add(ChanelToIndex,1029237,126,133)
{
link(onIndex,14089438:doEnabled,[])
}
Add(IndexToChanel,2020365,539,154)
{
link(onEvent1,13343954:doEvent1,[(579,160)(579,124)(44,124)(44,146)])
link(onEvent2,14157250:doEvent1,[(579,167)(579,219)(37,219)(37,188)])
}
Add(Hub,14157250,56,182)
{
link(onEvent1,1029237:doWork1,[(95,188)(95,139)])
link(onEvent2,13577073:doWork2,[])
}
Add(Hub,13343954,56,140)
{
link(onEvent1,1029237:doWork2,[])
link(onEvent2,13577073:doWork1,[(103,153)(103,188)])
}
Add(FormatStr,12410623,301,469)
{
Mask="%1;%2"
link(onFString,1688930:doBorderM,[(356,475)(356,160)])
link(Str1,10376206:Var3,[(307,459)])
link(Str2,2230186:Var3,[(314,448)])
}
Add(FormatStr,701679,301,539)
{
Mask="%1;%2"
link(onFString,1688930:doBorderB,[(366,545)(366,167)])
link(Str1,7834645:Var3,[(307,520)])
link(Str2,6072893:Var3,[(314,511)])
}
Add(GetDataEx,14983907,217,384)
{
link(Data,13427898:Text,[])
}
Add(GetDataEx,1939962,273,375)
{
link(Data,2198549:Text,[])
}
Add(GetDataEx,10376206,217,454)
{
link(Data,14983907:Var2,[])
}
Add(GetDataEx,2230186,273,443)
{
link(Data,1939962:Var2,[])
}
Add(FormatStr,3387319,308,665)
{
DataCount=3
Mask="%1;%2;%3"
link(onFString,1688930:doWrite,[(376,671)(376,153)])
link(Str1,7834645:Var2,[(314,640)(223,640)])
link(Str2,6072893:Var2,[(321,632)(279,632)])
link(Str3,2495151:Text,[])
}
Add(GetDataEx,7834645,217,515)
{
link(Data,10376206:Var2,[])
}
Add(GetDataEx,6072893,273,506)
{
link(Data,2230186:Var2,[])
}
Add(Memory,2707656,462,154)
{
Default=Integer(0)
link(onData,2020365:doEvent,[])
}
Add(IndexToChanel,8577920,189,77)
{
Point(Index)
link(onEvent2,13761980:doWork1,[(256,90)])
link(Index,2707656:Value,[(195,66)(507,66)(507,198)(468,198)])
}
Add(HubEx,13761980,252,182)
{
link(onEvent,1688930:doClose,[])
}
Add(Label,11713120,217,273)
{
Left=40
Top=55
Width=40
Height=17
Caption="Строка"
}
Add(Label,22743,273,273)
{
Left=135
Top=55
Width=46
Height=17
Caption="Столбец"
}
карма: 3

0
Ответов: 5227
Рейтинг: 586
#49: 2019-10-05 11:00:38 ЛС | профиль | цитата
fox-video, могу предложить допиленный вариант с VBJScript. Работает с кириллицей в fpc, подключает ActiveX визуальные контролы по Handle, устанавливает свойства для некоторых контролов HiAsm, работает из JScript c VBSript библиотеками (т.е с существующем в схеме скриптом библиотекой функций) и наоборот, работают все коментарии к точкам, может ещё что там допиливал забыл уже, код там сложноватый для напильника Но самое главное что там не нужно таких сложных конструкций как doWork..case(имя точки) case(имя точки) и т.д Про doWork можно просто забыть. В процедурах и функция можно использовать локальные переменные одноимённые наравне с глобальными (глобальные с приставкой me.(имя глобальной) переменной) Очень гибкий инструмент получился, единственное до чего руки не дошли так это до рисования графических примитивов
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
49
Сообщение
...
Прикрепленные файлы
(файлы не залиты)