Вверх ↑
Этот топик читают: Гость
Ответов: 263
Рейтинг: 5
#1: 2018-12-23 16:56:04 ЛС | профиль | цитата
Как автоматически сохранять excel? Сейчас при закрытии программы появляется окошко для сохранения. Нужно чтобы сохранялся excel файл сам без окошка, например по нажатию на кнопку все записи сами сохраняются, но документ не закрывается и с ним можно работать дальше. Так можно сделать?

Add(Button,11796961,238,147)
{
Left=5
Top=10
Width=65
Caption="Open Excel"
link(onClick,420540:doExecute,[])
}
Add(Hub,9982022,336,147)
{
link(onEvent1,10946710:doClear,[(440,153)(440,174)])
link(onEvent2,10692435:doOpen,[(361,160)(361,237)])
}
Add(ODialog,420540,287,147)
{
Filter="Excel(.xls,.xlsx)|*.xls;*.xlsx"
link(onExecute,9982022:doEvent1,[])
}
Add(ComboBox,10946710,448,161)
{
Left=120
Top=10
Width=140
Height=21
Text="Выбрать лист"
DataType=1
Point(doSelect)
link(onClick,10692435:doSheet,[(487,174)(487,223)(368,223)(368,258)])
}
Add(If_else,11782534,392,161)
{
Type=5
Op2=Integer(0)
link(onTrue,10946710:doAdd,[])
link(onFalse,10946710:doSelect,[(436,174)(436,195)])
}
Add(Label,4501845,154,147)
{
Left=75
Top=55
Caption="Row"
}
Add(Label,613563,196,147)
{
Left=135
Top=55
Width=39
Height=17
Caption="Column"
}
Add(Button,8636081,140,238)
{
Left=10
Top=80
Caption="Write"
link(onClick,1368601:doString,[])
}
Add(Edit,663925,154,189)
{
Left=75
Top=80
Text="2"
DataType=2
}
Add(Edit,10420173,196,189)
{
Left=130
Top=80
Text="1"
DataType=2
}
Add(FormatStr,1368601,189,238)
{
DataCount=3
Mask="%1;%2;%3"
link(onFString,10692435:doWrite,[])
link(Str1,663925:Text,[(195,233)(160,233)])
link(Str2,10420173:Text,[])
link(Str3,1087963:Text,[(209,230)(244,230)])
}
Add(VBJScript,10692435,392,231)
{
@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,[(431,237)(431,216)(382,216)(382,167)])
link(onOpen,4742625:doEvent,[])
}
Add(Memo,1087963,238,189)
{
Left=10
Top=115
Width=475
Height=210
ScrollBars=2
}
Add(MainForm,9161318,448,294)
{
Width=507
Height=372
Caption="In_Out_Excel"
Point(onClose)
link(onClose,604810:doCompare,[])
}
Add(LED,1408573,497,245)
{
Left=85
Top=5
}
Add(IndexToChanel,4742625,448,252)
{
link(onEvent1,1408573:doOff,[])
link(onEvent2,1408573:doOn,[])
}
Add(If_else,604810,497,315)
{
Op2=Integer(1)
link(onTrue,10692435:doClose,[(541,321)(541,290)(383,290)(383,272)])
link(Op1,1408573:Value,[])
}
карма: 2

0
vip
#1.1контекстная реклама от партнеров
Ответов: 8283
Рейтинг: 773
#2: 2018-12-23 18:31:18 ЛС | профиль | цитата
Sersey, или добавить в скрипт точку doSave и обозначить процедуру:

   Case "doSave"
objExcel.Application.Save
но окошка не избежать "А вы уверенны......?"
или в самой книге Excel (можно распространить на все книги) написать макрос на сохранение и вызывать его по имени (см архив) http://forum.hiasm.com/getfile/38557
карма: 14

0
Ответов: 263
Рейтинг: 5
#3: 2018-12-23 19:32:07 ЛС | профиль | цитата
Не работает, появляется ошибка

Add(Button,11796961,273,112)
{
Left=5
Top=10
Width=65
Caption="Open Excel"
link(onClick,420540:doExecute,[])
}
Add(Hub,9982022,371,112)
{
OutCount=3
link(onEvent1,10946710:doClear,[(475,118)(475,139)])
link(onEvent2,10692435:doOpen,[(396,125)(396,202)])
}
Add(ODialog,420540,322,112)
{
Filter="Excel(.xls,.xlsx)|*.xls;*.xlsx"
link(onExecute,9982022:doEvent1,[])
}
Add(ComboBox,10946710,483,126)
{
Left=120
Top=10
Width=140
Height=21
Text="Выбрать лист"
DataType=1
Point(doSelect)
link(onClick,10692435:doSheet,[(522,139)(522,188)(403,188)(403,223)])
}
Add(If_else,11782534,427,126)
{
Type=5
Op2=Integer(0)
link(onTrue,10946710:doAdd,[])
link(onFalse,10946710:doSelect,[(471,139)(471,160)])
}
Add(Label,4501845,189,112)
{
Left=75
Top=55
Caption="Row"
}
Add(Label,613563,231,112)
{
Left=135
Top=55
Width=39
Height=17
Caption="Column"
}
Add(Button,8636081,175,203)
{
Left=10
Top=80
Caption="Write"
link(onClick,1368601:doString,[])
}
Add(Edit,663925,189,154)
{
Left=75
Top=80
Text="2"
DataType=2
}
Add(Edit,10420173,231,154)
{
Left=130
Top=80
Text="1"
DataType=2
}
Add(FormatStr,1368601,224,203)
{
DataCount=3
Mask="%1;%2;%3"
link(onFString,10692435:doWrite,[])
link(Str1,663925:Text,[(230,198)(195,198)])
link(Str2,10420173:Text,[])
link(Str3,1087963:Text,[(244,195)(279,195)])
}
Add(VBJScript,10692435,427,196)
{
@Hint=#16:Query SQL Server|
WorkPoints=#6:doOpen|7:doWrite|6:doRead|7:doSheet|7:doMacro|6:doSave|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) |18: 'sys.onMacro 1|16: Case "doSave"|29: objExcel.Application.Save|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,[(466,202)(466,181)(417,181)(417,132)])
link(onOpen,4742625:doEvent,[])
}
Add(Memo,1087963,273,154)
{
Left=10
Top=115
Width=475
Height=210
ScrollBars=2
}
Add(MainForm,9161318,483,259)
{
Width=507
Height=372
Caption="In_Out_Excel"
Point(onClose)
link(onClose,604810:doCompare,[])
}
Add(LED,1408573,532,210)
{
Left=85
Top=5
}
Add(IndexToChanel,4742625,483,217)
{
link(onEvent1,1408573:doOff,[])
link(onEvent2,1408573:doOn,[])
}
Add(If_else,604810,532,280)
{
Op2=Integer(1)
link(onTrue,10692435:doClose,[(576,286)(576,265)(415,265)(415,244)])
link(Op1,1408573:Value,[])
}
Add(Button,3478469,322,231)
{
Left=190
Top=80
Caption="Save"
link(onClick,10692435:doSave,[])
}

карма: 2

0
Ответов: 8283
Рейтинг: 773
#4: 2018-12-23 20:44:27 ЛС | профиль | цитата
Sersey, Excel 2003 г, SP3
РаботаетБезОшибки.jpg
карма: 14

0
Ответов: 263
Рейтинг: 5
#5: 2018-12-23 21:23:05 ЛС | профиль | цитата
Когда нажимаю кнопу Save
Такая ошибка
Запись в файл .xlsx и .xls

Редактировалось 2 раз(а), последний 2018-12-23 22:57:22
карма: 2

0
Ответов: 8283
Рейтинг: 773
#6: 2018-12-23 23:21:14 ЛС | профиль | цитата
Sersey, может с администрированием не порядок? Я ведь вашу последнюю схему запускал, работает
карма: 14

0
Ответов: 263
Рейтинг: 5
#7: 2018-12-24 00:41:51 ЛС | профиль | цитата
У меня установлен Microsoft Office 2013 SP1 Standard все отлично работает, но при закрытии программы с вашим скриптом процесс excel.exe не всегда закрывается, чаще остается и окошко сохранения не всегда появляется при закрытии программы, потом нажимаю на файл excel и он спрашивает о сохранении.
карма: 2

0
Ответов: 8283
Рейтинг: 773
#8: 2018-12-24 10:19:33 ЛС | профиль | цитата
Sersey, версии от 2013 г. у меня нет Остаётся только по шинам постучать и фары тряпочкой протереть, а если не поможет, то коллегу andrestudio звать, он более нас разбирается в VB
карма: 14

0
Ответов: 263
Рейтинг: 5
#9: 2018-12-24 18:08:10 ЛС | профиль | цитата
Так причем тут офис http://nnm-club.me/forum/viewtopic.php?t=1200759 andrestudio посмотрите скрипт

Редактировалось 1 раз(а), последний 2018-12-24 18:09:27
карма: 2

0
Ответов: 4340
Рейтинг: 470
#10: 2018-12-24 18:59:05 ЛС | профиль | цитата
Sersey, на ресурс меня не пускает. У меня vbjscript перепилен изрядно (и ещё ждёт своей доработки) Обычно большинство вопросов уже решаемо на сером форуме http://forum.script-coding.com
карма: 4

0
Ответов: 263
Рейтинг: 5
#11: 2018-12-24 19:15:43 ЛС | профиль | цитата
Мне нужно иметь возможность сохранять длинный текст с переводом строк в файл .xslx, с помощью вашего скрипта весь текст вставляется в ячейку файла excel, но есть проблемы с сохранением. Знаете другой рабочий способ вставить длинный текст в excel файл, а не только 255 символов ?
карма: 2

0
Ответов: 4340
Рейтинг: 470
#12: 2018-12-24 19:34:00 ЛС | профиль | цитата
Sersey, навряд ли это мой скрипт. Как помню вроде есть метод SaveAs там с любым расширен им который поддерживает экспорт, в современных и в PDF может. В любом случае мой vbjscript избавлен от анахронизма где методы нужно выстраивать с помощью Select Case всё как в обычном IC только
Sub doName(dt,idx)
....
End Sub
По сему даже твой скрипт запустить не смогу.
карма: 4

0
Ответов: 263
Рейтинг: 5
#13: 2018-12-24 19:55:53 ЛС | профиль | цитата
Тут вот в чем дело. Если например открыть в хайясме файл .xlsx с помощью sqlite3.dll то очень быстро открывается, но опять есть "но". Делаю парсер у меня на компе все отлично открывается, а на win 10, совсем не работает пока не переустановлю программу excel, вот драйвера все есть, а не работает совсем. В общем косяки в двух случаях. Нужна хорошая система, например отдельно открыть файл в хайясме, а потом другая система сохранить с длинным текстом без обрезки в 255 символов. 255 символов это я как понял проблема файлов .xls а как с помощью sqlite3.dll сохранить в .xlsx?
Вот открытие файла и то бывает runtime error, один файл нормально открывает, а другой runtime error и прога закрывается. На этом компе win7 32, процессор современный и оператива 4 Гб

Add(MainForm,2953706,21,105)
{
Width=659
Height=610
}
Add(ChildPanel,6304782,280,105)
{
}
BEGIN_SDK
Add(EditMulti,13873045,21,21)
{
EventCount=2
WorkCount=1
Width=664
Height=417
link(doWork1,2108518:doEvent1,[(37,27)(37,202)])
}
Add(Panel,14000364,63,28)
{
Width=643
Height=73
Align=2
Visible=1
Layout="parent.vert"
}
Add(FormatStr,15762674,385,119)
{
Mask="Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};\r\nDriverID=22;\r\nDBQ=%1;\r\nDefaultDir=%2;\r\nFirstRowWhasNames=1;\r\nReadOnly=true;\r\nScanRows=0;"
Point(FString)
link(Str2,16353759:Var2,[])
AddHint(44,-31,187,104,Mask)
}
Add(OLEdb,3042347,245,266)
{
Point(onError)
link(onConnect,15799951:doCreate,[])
link(Driver,15762674:FString,[(251,186)(391,186)])
link(onError,9853256:doWork2,[(291,279)(291,307)])
}
Add(OLEdb_Session,15799951,308,266)
{
Point(onError)
link(onError,9853256:doWork1,[(352,279)])
}
Add(FormatStr,5978579,490,273)
{
Mask="SELECT * FROM "%2"."%1$A1:BH" "%1$";"
Point(FString)
link(onFString,6949883:doQuery,[(538,279)(538,316)(296,316)(296,377)])
link(Str2,16353759:Var3,[(503,103)])
AddHint(-15,-62,191,26,Mask)
}
Add(VBJScript,345803,385,210)
{
@Hint=#16:Query SQL Server|
WorkPoints=#6:doOpen|7:doSheet|7:doClose|
EventPoints=#8:onSheets|6:onOpen|
Script=#9:Dim strIn|5:Dim i|5:Dim j|12:Dim objExcel|11:Dim onExcel|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)|71: j = objWorkbook.Sheets.Count 'Узнаём количество листов|88: For i=1 To j 'Листы начинаются не с "0", а с "1" |86: strIn = objWorkbook.Sheets(i).Name 'Узнаём имя очередного листа |65: sys.onSheets strIn 'Выводим имя наружу|9: Next|17: sys.onOpen 1 |94: 'Case "doSheet" 'На вход подаётся строка, содержащая имя Листа|33: 'objExcel.Sheets(Data).Select|38: 'objExcel.ActiveSheet.Cells.Select|43: 'objExcel.Selection.NumberFormat = "@" |39: 'objExcel.ActiveWorkbook.Save() |17: Case "doClose"|17: objExcel.Quit|26: Set objExcel = Nothing|17: sys.onOpen 0 |0:|11: End Select|0:|7:End Sub|
UseName=0
link(onSheets,578465:doData,[])
}
Add(Hub,45852,350,203)
{
OutCount=3
link(onEvent1,15762674:doString,[(374,209)(374,125)])
link(onEvent2,345803:doOpen,[])
link(onEvent3,345803:doClose,[(374,223)(374,230)])
}
Add(Hub,11410566,140,203)
{
OutCount=3
link(onEvent1,45852:doEvent1,[])
link(onEvent2,3042347:doOpen,[(200,216)(200,272)])
link(onEvent3,15734214:doData,[(294,223)(294,279)])
}
Add(LineBreakEx,15642429,371,301)
{
Caption="error"
}
Add(HubEx,9853256,348,301)
{
link(onEvent,15642429:doWork,[])
}
Add(LineBreakEx,8833105,567,21)
{
Caption="error"
Type=1
link(OnEvent,5569768:doWork2,[])
}
Add(EventFromData,578465,434,210)
{
}
Add(Hub,2108518,105,196)
{
link(onEvent1,9780797:doData,[(255,202)(255,62)])
link(onEvent2,11410566:doEvent1,[])
}
Add(EventFromData,9780797,392,56)
{
}
Add(DoData,15734214,434,273)
{
link(onEventData,5978579:doString,[])
link(Data,578465:GetData,[])
}
Add(OLEdb_Query,6949883,308,371)
{
link(onQuery,10195882:doEvent1,[(352,377)(352,363)])
link(onColumns,2369042:doAddCols,[])
link(onError,5569768:doWork3,[(627,391)])
link(dbSession,15799951:dbSession,[])
link(Text,5978579:FString,[(321,320)(496,320)])
}
Add(MST_DB,2369042,413,371)
{
MSTControl="parent.tabl_1"
}
Add(HubEx,5569768,623,21)
{
link(onEvent,13873045:onEvent1,[])
}
Add(GetDataEx,16353759,392,98)
{
link(Data,9780797:GetData,[])
}
Add(Hub,10195882,364,357)
{
OutCount=3
link(onEvent1,9261340:doStopAll,[(396,363)(396,356)])
link(onEvent2,9261340:doTimer,[(396,370)(396,342)])
link(onEvent3,2369042:doAddRow,[])
}
Add(Timer,9261340,413,336)
{
Interval=1500
Enable=1
AutoStop=1
Point(doStopAll)
link(onTimer,13873045:onEvent2,[(565,342)(565,34)])
}
END_SDK
Add(ODialog,1063971,182,105)
{
Filter="Microsoft Excel (.xls,.xlsx)|*.xls;*.xlsx"
Title="Выбрать файл"
FileName=""
Select=1
link(onExecute,11002347:doText,[])
}
Add(MTStrTbl,4101435,77,105)
{
Top=73
Width=604
Height=495
Name="tabl_1"
}
Add(Button,15935873,133,105)
{
Left=5
Top=5
Width=95
Height=40
Font=[MS Sans Serif,10,1,0,1]
Hint="Выберите файл excel для конвертирования"
Caption="Открыть"
link(onClick,1063971:doExecute,[])
}
Add(Edit,11002347,231,105)
{
Left=105
Top=5
Width=430
Text=""
link(onChange,6304782:doWork1,[])
}

карма: 2

0
Ответов: 263
Рейтинг: 5
#14: 2018-12-25 00:04:57 ЛС | профиль | цитата
Вот реальный вопрос, как можно средствами хайясм загрузить файл .xlsx а потом сохранить. И еще не поддерживаемая кодировка unicode, про браузер уже молчу, сам придумал, сейчас он даже лучще, например скролл и полный текст страницы получает еще быстрее примерно четверть секунды. Сейчас многие сайты переходят на прокрутку для сайтов, вот прокрутил ниже и загрузилось, яша тот вообще сделал код, например наводишь мишкой, можешь html узнать, мышка в другом фокусе и код другой. Так вот IЁ уже не катит, загружается одна страница и берет непонятно почему 100 Мб оперативной памяти жрет и страница следующая опять добавляет эти Мб и через несколько страниц оператива заканчивается. Так я пользуюсь теперь только своим браузером, который смог приручить
карма: 2

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