Вверх ↑
Разработчик
Ответов: 26268
Рейтинг: 2141
#1: 2025-03-09 03:37:04 ЛС | профиль | цитата
Вы тут сильно не ругайтесь. Но захотелось немного потренироваться, и я решил сделать конвертор без применения базы данных. Те использовать метод, который напрямую связан с Excel, без всяких OLE и ODBC -- DDE. Этот метод должен работать на любой машине с любым Excel. И вот что получилось (да не обессудит меня Gunta, тк некоторые решения я тупо у него стырил )

Схема

Add(MainForm,4844206,161,161)
{
Left=20
Top=105
Width=450
Height=437
MarginLeft=5
MarginTop=5
MarginRight=5
MarginBottom=5
Caption="Работа с Excel"
Position=1
Point(Handle)
link(onCreate,6027587:doPopup,[(200,181)(200,258)(151,258)(151,230)])
}
Add(DDEClient,12344087,644,210)
{
ServiceName="EXCEL"
AutoUpdate=1
Point(doExecute)
Point(onError)
Point(onExecute)
Point(doTopicName)
link(onOpenLink,4210895:doWork1,[(683,216)(683,111)(214,111)(214,125)])
link(onGetItem,15181236:doInputEvent,[])
}
Add(For,8369739,245,217)
{
Start=1
End=100
link(onEvent,5561371:doString,[])
link(onStop,15621989:doEvent1,[(298,230)(298,300)])
}
Add(FormatStr,5561371,308,217)
{
DataCount=1
Mask="R1C%1"
link(onFString,12512474:doEvent1,[])
}
Add(MTStrTbl,5816951,161,119)
{
Top=50
Width=434
Height=348
Align=5
Name="excel"
}
Add(MST_Clear,4101504,644,259)
{
ClearAll=0
MSTControl="excel"
}
Add(Hub,16613303,595,245)
{
OutCount=4
link(onEvent1,12344087:doTopicName,[])
link(onEvent2,12344087:doOpenLink,[(620,258)(620,216)])
link(onEvent3,4101504:doClear,[])
link(onEvent4,8369739:doFor,[(631,272)(631,321)(235,321)(235,223)])
}
Add(MST_ColAction,10034592,987,210)
{
MSTControl="excel"
}
Add(ChanelSwitch,15181236,721,210)
{
link(onOutEvent1,8059813:doTrim,[])
link(onOutEvent2,2966136:doTrim,[(760,223)(760,342)])
}
Add(Hub,12512474,364,217)
{
link(onEvent1,15181236:doSwitchToChanel1,[(501,223)(501,178)(700,178)(700,216)])
link(onEvent2,15600924:doWork2,[])
}
Add(For,7961195,371,357)
{
@Hint=#1:Y|
Start=2
End=100
link(onEvent,86887:doFor,[])
link(onStop,13362148:doEvent1,[(410,370)(410,573)])
AddHint(35,-31,22,13,@Hint)
}
Add(Hub,15621989,315,294)
{
link(onEvent1,15181236:doSwitchToChanel2,[(683,300)(683,223)])
link(onEvent2,7961195:doFor,[(343,307)(343,363)])
}
Add(FormatStr,8261114,490,357)
{
Mask="R%1C%2"
link(onFString,15600924:doWork3,[(543,363)])
link(Str1,7961195:Position,[(496,348)(482,348)(482,397)(377,397)])
}
Add(For,86887,427,357)
{
@Hint=#1:X|
Start=1
End=100
link(onEvent,8261114:doString,[])
link(onStop,7769877:doAdd,[(466,370)(466,405)])
AddHint(35,-31,22,13,@Hint)
}
Add(HubEx,15600924,539,224)
{
link(onEvent,12344087:doGetItem,[])
}
Add(MT_Add,3542868,938,336)
{
InputMT=1
link(onAdd,295797:doValue,[(977,342)(977,258)(928,258)(928,272)])
link(Data,5485813:Var2,[])
}
Add(MT_Memory,295797,938,266)
{
}
Add(MT_Add,7769877,763,399)
{
InputMT=2
link(onAdd,6345748:doEvent1,[])
link(Data,5485813:Var1,[(769,313)])
}
Add(GetDataEx,5485813,938,308)
{
link(Data,295797:Value,[])
}
Add(MST_RowAction,4339442,1239,399)
{
MSTControl="excel"
}
Add(Hub,6345748,903,399)
{
OutCount=3
link(onEvent1,10866116:doSeparateMT,[])
link(onEvent2,8860620:doSeparateMT,[(970,412)(970,454)])
link(onEvent3,295797:doClear,[(928,419)(928,279)])
}
Add(Trim,2966136,784,336)
{
Char=" "
link(onTrim,5624993:doTrim,[])
}
Add(Case,9554756,938,210)
{
Value=String()
link(onNextCase,10034592:doColAction,[])
}
Add(Trim,6912231,833,210)
{
Char="\n"
link(onTrim,12911157:doTrim,[])
}
Add(Trim,8059813,784,210)
{
Char="\r\n"
link(onTrim,6912231:doTrim,[])
}
Add(Trim,12911157,882,210)
{
Char="\r"
link(onTrim,9554756:doCase,[])
}
Add(MT_MultiData,10866116,980,399)
{
From=5
Count=1
link(onData1,7045169:doCompare,[])
}
Add(Case,12388025,1141,399)
{
Value=String()
link(onNextCase,6476696:doAdd,[])
}
Add(MT_Add,6476696,1190,399)
{
InputMT=2
link(onAdd,4339442:doRowAction,[])
link(Data,5485813:Var3,[(1196,313)])
}
Add(StrMask,7045169,1036,399)
{
Mask="Распрод*"
link(onFalse,708575:doSwitchToChanel1,[])
link(onTrue,708575:doSwitchToChanel2,[])
}
Add(ChanelSwitch,708575,1092,399)
{
link(onOutEvent1,12388025:doCase,[])
}
Add(MT_MultiData,8860620,980,448)
{
Count=1
link(onData1,708575:doInputEvent,[(1075,454)(1075,419)])
}
Add(FormatStr,236393,588,581)
{
DataCount=42
Mask="<Товар Группа="%1" Вид="%2" Производитель="%4" НН="%5" Партномер="%7" Название="%8" НазваниеРус="%3" Статус="" Цена="%9" Валюта="%10" ПроцентКонв="call" Вес="%34" Объем="%35" Ширина="%36" Высота="%37" Глубина="%38" ЕдИзм="%32">\r\n<Склад Место="ЦО" Количество="%12">\r\n<Склад Место="ЦО(Москва)" Количество="%15"/>\r\n</Склад>"
link(onFString,477419:doWork2,[])
}
Add(MST_ArrayRows,12784195,532,525)
{
MSTControl="excel"
}
Add(MT_MTArrayEnum,8507433,532,581)
{
link(onItem,236393:doString,[])
link(Array,12784195:Strings,[])
}
Add(Hub,13362148,441,567)
{
OutCount=6
link(onEvent1,8648615:doClear,[(970,573)(970,594)])
link(onEvent2,15108078:doString,[(494,580)(494,517)])
link(onEvent3,8507433:doEnum,[])
link(onEvent4,13275218:doPart,[(505,594)(505,664)])
link(onEvent5,6405071:doString,[(490,601)(490,720)])
}
Add(FormatStr,15108078,588,511)
{
Mask="<Сток Дата="%1">"
link(onFString,477419:doWork1,[(907,517)])
link(Str1,4815497:FormatTime,[])
}
Add(Time,4815497,588,462)
{
Format="D:M:Y h:m:s"
}
Add(Charset,3130587,931,581)
{
Type=6
link(onCharset,8648615:doAdd,[])
}
Add(HubEx,477419,903,581)
{
link(onEvent,3130587:doCharset,[])
}
Add(FilePartElm,13275218,700,658)
{
Mode=6
link(onPart,16233257:doStrCat,[])
link(FileName,4210895:Var1,[(706,649)(230,649)])
}
Add(StrCat,16233257,756,658)
{
Str2=".xml"
link(onStrCat,8648615:doSave,[(970,664)(970,615)])
}
Add(Message,14276668,812,714)
{
}
Add(FormatStr,6405071,756,714)
{
Mask="Создан файл - %1"
link(onFString,14276668:doMessage,[])
link(Str1,16233257:Result,[])
}
Add(StrList,8648615,1008,581)
{
Point(doSave)
}
Add(Trim,5624993,833,336)
{
Char="\n"
link(onTrim,13656227:doTrim,[])
}
Add(Trim,13656227,882,336)
{
Char="\r"
link(onTrim,3542868:doAdd,[])
}
Add(ChildPanel,4210895,224,119)
{
link(onEvent1,16613303:doEvent1,[(550,125)(550,251)])
}
BEGIN_SDK
Add(EditMulti,6163233,21,21)
{
EventCount=1
WorkCount=1
VarCount=1
Width=412
Height=214
link(doWork1,3708702:doChangeValue,[(39,27)(39,34)])
link(Var1,2588770:Value,[(27,145)(300,145)])
}
Add(Panel,8574939,119,28)
{
Width=434
Align=2
Ctl3D=0
WinStyle=1
BorderWidth=0
BevelWidth=0
BevelInner=0
}
Add(Button,11312604,119,77)
{
Left=10
Top=10
TabOrder=-1
Caption="Open"
Point(doCaption)
link(onClick,7406706:doExecute,[])
}
Add(Edit,621552,294,42)
{
Left=70
Top=11
Width=325
WinStyle=2
Text=""
}
Add(ODialog,7406706,175,77)
{
link(onExecute,14842716:doEvent1,[])
}
Add(Hub,14842716,224,77)
{
OutCount=3
link(onEvent1,621552:doText2,[(250,83)(250,55)])
link(onEvent2,2588770:doValue,[])
link(onEvent3,4017987:doShellExec,[(277,97)(277,167)])
}
Add(FilePartElm,14509320,343,84)
{
Point(Part)
}
Add(WinExec,4017987,287,154)
{
link(onExec,10306272:doString,[])
}
Add(FormatStr,10306272,343,154)
{
DataCount=1
Mask="[%1]Лист1"
link(onFString,6163233:onEvent1,[(382,160)(382,27)])
link(Str1,14509320:Part,[])
}
Add(Memory,2588770,294,84)
{
link(onData,14509320:doPart,[])
}
Add(LED,3708702,49,28)
{
Left=400
Top=10
Width=20
Height=20
Ctl3D=0
WinStyle=1
Shape=1
ColorBlick=255
}
END_SDK
Add(WinTools,6027587,161,217)
{
link(Handle,4844206:Handle,[])
}

карма: 22

0
Редактировалось 5 раз(а), последний 2025-03-09 03:50:22