nesco писал(а):
решил сделать конвертор без применения базы данных. Те использовать метод, который напрямую связан с Excel, без всяких OLE и ODBC -- DDE.А если строк в excel файле больше 100?
И я бы сделал небольшую задержку между запуском excel и всем остальным.
Add(MainForm,4844206,21,63)
{
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,[(60,83)(60,160)(11,160)(11,132)])
}
Add(MTStrTbl,5816951,21,21)
{
Top=50
Width=434
Height=348
Align=5
Name="excel"
}
Add(FormatStr,236393,756,147)
{
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,84)
{
MSTControl="excel"
}
Add(MT_MTArrayEnum,8507433,532,140)
{
link(onItem,10866116:doSeparateMT,[])
link(Array,12784195:Strings,[])
}
Add(Hub,13362148,441,126)
{
OutCount=6
link(onEvent1,15477052:In,[(466,132)(466,111)])
link(onEvent2,15108078:doString,[(517,139)(517,83)])
link(onEvent3,8507433:doEnum,[])
link(onEvent4,13275218:doPart,[(505,153)(505,230)])
link(onEvent5,6405071:doString,[(490,160)(490,286)])
}
Add(FormatStr,15108078,756,77)
{
Mask="<Сток Дата="%1">"
link(onFString,477419:doWork1,[(1075,83)])
link(Str1,4815497:FormatTime,[])
}
Add(Time,4815497,756,28)
{
Format="D:M:Y h:m:s"
}
Add(Charset,3130587,1099,147)
{
Type=6
link(onCharset,8648615:doAdd,[])
}
Add(HubEx,477419,1071,147)
{
link(onEvent,3130587:doCharset,[])
}
Add(FilePartElm,13275218,868,224)
{
Mode=6
link(onPart,16233257:doStrCat,[])
link(FileName,4210895:Var1,[(874,208)(104,208)])
}
Add(StrCat,16233257,924,224)
{
Str2=".xml"
link(onStrCat,8648615:doSave,[(1138,230)(1138,181)])
}
Add(Message,14276668,980,280)
{
}
Add(FormatStr,6405071,924,280)
{
Mask="Создан файл - %1"
link(onFString,14276668:doMessage,[])
link(Str1,16233257:Result,[])
}
Add(StrList,8648615,1176,147)
{
Point(doSave)
}
Add(ChildPanel,4210895,98,119)
{
link(onEvent1,15557525:doString,[])
}
BEGIN_SDK
Add(EditMulti,6163233,21,21)
{
EventCount=1
WorkCount=1
VarCount=1
Width=412
Height=214
link(Var1,2588770:Value,[(27,145)(223,145)])
}
Add(Panel,8574939,42,28)
{
Width=434
Align=2
Ctl3D=0
WinStyle=1
BorderWidth=0
BevelWidth=0
BevelInner=0
}
Add(Button,11312604,42,77)
{
Left=10
Top=10
TabOrder=-1
Caption="Open"
Point(doCaption)
link(onClick,7406706:doExecute,[])
}
Add(Edit,621552,217,42)
{
Left=70
Top=11
Width=325
WinStyle=2
Text=""
}
Add(ODialog,7406706,98,77)
{
link(onExecute,14842716:doEvent1,[])
}
Add(Hub,14842716,147,77)
{
OutCount=3
link(onEvent1,621552:doText2,[(173,83)(173,55)])
link(onEvent2,2588770:doValue,[])
}
Add(WinExec,4017987,273,77)
{
link(onExec,15475224:doDeferredEvent,[])
}
Add(Memory,2588770,217,84)
{
link(onData,4017987:doShellExec,[])
}
Add(DeferredEvent,15475224,329,77)
{
Delay=500
link(onDeferredEvent,6163233:onEvent1,[(389,83)(389,27)])
}
END_SDK
Add(WinTools,6027587,21,119)
{
link(Handle,4844206:Handle,[])
}
Add(DDEClient,12344087,203,91)
{
ServiceName="EXCEL"
TopicName="system"
AutoUpdate=1
Point(onExecute)
Point(onError)
Point(doExecute)
link(onExecute,15882137:doEvent,[])
}
Add(Convertor,5491408,315,126)
{
Mode=12
link(onResult,11674960:doLoadFromStream,[])
link(Data,2176761:Text,[])
}
Add(MST_Load,11674960,378,119)
{
Delimiter="\t"
MSTControl="excel"
link(onLoadFromStream,13362148:doEvent1,[])
}
Add(IndexToChanel,15882137,252,119)
{
link(onEvent2,5491408:doConvert,[])
}
Add(Clipboard,2176761,315,70)
{
Unicode=0
}
Add(FormatStr,15557525,154,119)
{
Mask="[ACTIVATE()][SELECT("R4C2")][SELECT.SPECIAL(5)][COPY()][SELECT("R1C1")]"
link(onFString,12344087:doExecute,[])
}
Add(LineBreak,9178964,1134,154)
{
link(Out,8648615:doClear,[])
Primary=[15477052,-658,-49]
}
Add(MT_MultiData,10866116,595,140)
{
From=5
link(onData1,12388025:doCase,[])
}
Add(Case,12388025,651,140)
{
Value=String()
link(onTrue,6476696:doAdd,[])
}
Add(MT_Add,6476696,700,147)
{
InputMT=2
link(onAdd,236393:doString,[])
link(Data,8507433:Item,[(706,138)(692,138)(692,180)(538,180)])
}
--- Добавлено в 2025-03-09 08:16:42
Для тех, кому интересно работать с excel через dde
http://www.excelworld.ru/publ/funcs/makrofuncs/makrofuncs/24-1-0-50
Внизу страницы есть алфавитный список почти всех команд.