Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе
причем здесь ёхсель?подскажите, пожалуйста, а можно ли кнопкой в виде вывести в excel данные только категории и 2х подкатегорий, и при этом одна из колонок идет сумма данных
Sub Initialize
'I placed all of the code in a single sub
(normally I split it all out... but for this demo
purpose, I just put all code in one sub)
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Dim tmpdir As String
Dim uiview As NotesUIView
Dim view As NotesView
Dim dc As NotesDocumentCollection
Dim ret As Integer
Dim session As NotesSession
Dim db As NotesDatabase
Dim workspace As NotesUIWorkspace
Dim tmpdatafilename As String
Dim tmpdatafilenumber As Integer
Dim memodoc As NotesDocument
Dim rtitem As NotesRichTextItem
Dim object As NotesEmbeddedObject
Set session = New NotesSession
Set workspace = New NotesUIWorkspace
Set db = session.CurrentDatabase
tmpdir = session.GetEnvironmentString
("Directory", True)
tmpdatafilenumber% = Freefile()
tmpdatafilename = tmpdir & "HRReport.xls"
'Open a file for output
Open tmpdatafilename For Output As
tmpdatafilenumber
Set uiview = workspace.CurrentView
Set view = uiview.View
'Print to the file some basic CSS for easy
formatting later if the users want a change
to the default.
Print # tmpdatafilenumber%, |
<HTML>
<HEAD>
<TITLE>Table example</TITLE>
<STYLE type="text/css">
TABLE { background: #ffffff; border: solid black;
empty-cells: hide }
TD { border: solid black;
border-left: none;
border-right: none;
}
TD.top { border: solid black;
border-left: none;
border-right: none;
background: #C0C0C0;
font-weight: bold;
font-size: 11px;
text-align: center;
}
TD.viewname { border: solid black;
border-left: none;
border-right: none;
border-bottom: none;
background: #C0C0C0;
font-weight: bold;
font-size: 16px;
text-align: left;
}
TD.salary { border: solid black;
border-left: none;
border-right: none;
background: #00FFFF;
}
</STYLE>
</HEAD>
<BODY>|
'Heart of the code....
'Print an HTML Table and then construct
the table from the column contents
of the current view.
Print # tmpdatafilenumber%, |<table>|
'Include the view name in the top of the
spreadsheet
Print # tmpdatafilenumber%, |<tr>|
Print # tmpdatafilenumber%,
|<td class="viewname"
colspan="| & Cstr((Ubound(view.Columns) + 1))
& |">|
Print # tmpdatafilenumber%, view.Name
Print # tmpdatafilenumber%, |</td>|
Print # tmpdatafilenumber%, |</tr>|
'Start a row of headers (couldn't get TH CSS to work,
so I created my own class called top)
Print # tmpdatafilenumber%, |<tr>|
Forall vc In view.Columns
Print # tmpdatafilenumber%, |<td class="top">|
Print # tmpdatafilenumber%, vc.title
Print # tmpdatafilenumber%, |</td>|
End Forall
Print # tmpdatafilenumber%, |</tr>|
'Now loop though all of the documents in the
view and create a HTML for each one.
'For each column, put in the cell tag.
Set doc = view.GetFirstDocument
Do While Not doc Is Nothing
Print # tmpdatafilenumber%, |<tr>|
Forall c In doc.ColumnValues
Print # tmpdatafilenumber%, |<td>|
If Isarray(c) Then 'Make sure you work with a
multivalued field.
For a = 0 To Ubound(c)
If a = 0 Then
Print # tmpdatafilenumber%, c(a)
Else
Print # tmpdatafilenumber%, "<br>" & c(a)
End If
Next
Print # tmpdatafilenumber%, |</td>|
Else
Print # tmpdatafilenumber%, c
End If
Print # tmpdatafilenumber%, |</td>|
End Forall
Print # tmpdatafilenumber%, |</tr>|
Set doc = view.GetNextDocument(doc)
Loop
'Now that you have all of your data, end the
table and html tags
Print # tmpdatafilenumber%, |</table>|
Print # tmpdatafilenumber%, |</body>|
Print # tmpdatafilenumber%, |</html>|
Close tmpdatafilenumber%
'Now you can either prompt them for where the
report is on their hard drive, or you can
email it to them
'If like email....
Set memodoc = db.CreateDocument
memodoc.Form = "Memo"
memodoc.Subject = "Exported View Report"
Set rtitem = New NotesRichTextItem
(memodoc, "Body")
Call rtitem.AppendText(memodoc.Subject(0))
Call rtitem.AppendText(Chr$(10) & Chr$(10))
Call rtitem.AppendText("Open the attached file
in Excel to view the report.")
Call rtitem.AppendText(Chr$(10) & Chr$(10))
Set object = rtitem.EmbedObject _
( EMBED_ATTACHMENT, "", tmpdatafilename)
memodoc.SendTo = session.UserName
Call memodoc.Send(False)
Kill tmpdatafilename ' Delete the file from the
users hard drive if you email the report.
Messagebox "Please check your inbox for the
report", 0 + 64, "Report Complete"
End Sub
попробовала, но получается, что просто все данные выгружаются, а как именно выгрузить суммирующее значение, которое по каждой категории идет, не поймупричем здесь ёхсель?
программно получить значения из нужного вида можно через NotesViewNavigator (постоить его от нужной категории), далее POI или лепитьСсылка скрыта от гостей
интерактивно - просто выдели нужное и Edit->Copy As->Table , вставить в хухель
вотСсылка скрыта от гостейкод оттудова (там могут регаться запросить)
Код:Sub Initialize 'I placed all of the code in a single sub (normally I split it all out... but for this demo purpose, I just put all code in one sub) Dim doc As NotesDocument Dim uidoc As NotesUIDocument Dim tmpdir As String Dim uiview As NotesUIView Dim view As NotesView Dim dc As NotesDocumentCollection Dim ret As Integer Dim session As NotesSession Dim db As NotesDatabase Dim workspace As NotesUIWorkspace Dim tmpdatafilename As String Dim tmpdatafilenumber As Integer Dim memodoc As NotesDocument Dim rtitem As NotesRichTextItem Dim object As NotesEmbeddedObject Set session = New NotesSession Set workspace = New NotesUIWorkspace Set db = session.CurrentDatabase tmpdir = session.GetEnvironmentString ("Directory", True) tmpdatafilenumber% = Freefile() tmpdatafilename = tmpdir & "HRReport.xls" 'Open a file for output Open tmpdatafilename For Output As tmpdatafilenumber Set uiview = workspace.CurrentView Set view = uiview.View 'Print to the file some basic CSS for easy formatting later if the users want a change to the default. Print # tmpdatafilenumber%, | <HTML> <HEAD> <TITLE>Table example</TITLE> <STYLE type="text/css"> TABLE { background: #ffffff; border: solid black; empty-cells: hide } TD { border: solid black; border-left: none; border-right: none; } TD.top { border: solid black; border-left: none; border-right: none; background: #C0C0C0; font-weight: bold; font-size: 11px; text-align: center; } TD.viewname { border: solid black; border-left: none; border-right: none; border-bottom: none; background: #C0C0C0; font-weight: bold; font-size: 16px; text-align: left; } TD.salary { border: solid black; border-left: none; border-right: none; background: #00FFFF; } </STYLE> </HEAD> <BODY>| 'Heart of the code.... 'Print an HTML Table and then construct the table from the column contents of the current view. Print # tmpdatafilenumber%, |<table>| 'Include the view name in the top of the spreadsheet Print # tmpdatafilenumber%, |<tr>| Print # tmpdatafilenumber%, |<td class="viewname" colspan="| & Cstr((Ubound(view.Columns) + 1)) & |">| Print # tmpdatafilenumber%, view.Name Print # tmpdatafilenumber%, |</td>| Print # tmpdatafilenumber%, |</tr>| 'Start a row of headers (couldn't get TH CSS to work, so I created my own class called top) Print # tmpdatafilenumber%, |<tr>| Forall vc In view.Columns Print # tmpdatafilenumber%, |<td class="top">| Print # tmpdatafilenumber%, vc.title Print # tmpdatafilenumber%, |</td>| End Forall Print # tmpdatafilenumber%, |</tr>| 'Now loop though all of the documents in the view and create a HTML for each one. 'For each column, put in the cell tag. Set doc = view.GetFirstDocument Do While Not doc Is Nothing Print # tmpdatafilenumber%, |<tr>| Forall c In doc.ColumnValues Print # tmpdatafilenumber%, |<td>| If Isarray(c) Then 'Make sure you work with a multivalued field. For a = 0 To Ubound(c) If a = 0 Then Print # tmpdatafilenumber%, c(a) Else Print # tmpdatafilenumber%, "<br>" & c(a) End If Next Print # tmpdatafilenumber%, |</td>| Else Print # tmpdatafilenumber%, c End If Print # tmpdatafilenumber%, |</td>| End Forall Print # tmpdatafilenumber%, |</tr>| Set doc = view.GetNextDocument(doc) Loop 'Now that you have all of your data, end the table and html tags Print # tmpdatafilenumber%, |</table>| Print # tmpdatafilenumber%, |</body>| Print # tmpdatafilenumber%, |</html>| Close tmpdatafilenumber% 'Now you can either prompt them for where the report is on their hard drive, or you can email it to them 'If like email.... Set memodoc = db.CreateDocument memodoc.Form = "Memo" memodoc.Subject = "Exported View Report" Set rtitem = New NotesRichTextItem (memodoc, "Body") Call rtitem.AppendText(memodoc.Subject(0)) Call rtitem.AppendText(Chr$(10) & Chr$(10)) Call rtitem.AppendText("Open the attached file in Excel to view the report.") Call rtitem.AppendText(Chr$(10) & Chr$(10)) Set object = rtitem.EmbedObject _ ( EMBED_ATTACHMENT, "", tmpdatafilename) memodoc.SendTo = session.UserName Call memodoc.Send(False) Kill tmpdatafilename ' Delete the file from the users hard drive if you email the report. Messagebox "Please check your inbox for the report", 0 + 64, "Report Complete" End Sub
Set view = db.GetView( "view" )
Set nav = view.CreateViewNav
RowPointer= 1
Set entry = nav.GetFirst
While Not ( entry Is Nothing )
If entry.IsCategory Then
xlSheet.Range( "A" & Cstr( RowPointer) ).value = entry.ColumnValues(0)
xlSheet.Range( "B" & Cstr( RowPointer) ).value = entry.ColumnValues(1)
...
Set entry = nav.GetNext( entry )
RowPointer = RowPointer + 1
Wend
этот код на для воспроизведения, а для принципа формирования файла! (без всякой КОМ)попробовала, но получается, что просто все данные выгружаются, а как именно выгрузить суммирующее значение, которое по каждой категории идет, не пойм
ничего не понялпереносит все, делает по категориям, но есть пустые строки, так как там параметр идет в виде
например Тест у него есть документы 2019 - далее они группируются по месяцу, и там в сентябре 4 документа, в августе два. есть столбец с суммой , и вот в сентябре суммарно 1000, в августе 500, за 2019 всего суммарно 1500. вот он так и выводит, но только в каждом месяце добавляет пустые строки (4 сентябрь пустых, 2 в августе)этот код на для воспроизведения, а для принципа формирования файла! (без всякой КОМ)
КОМ - это очень медленно и глючно
а по навигатору ничего не понял
если нужны данные только из строк-категорий, то и ходить навигатором надо только по категориям:например Тест у него есть документы 2019 - далее они группируются по месяцу, и там в сентябре 4 документа, в августе два. есть столбец с суммой , и вот в сентябре суммарно 1000, в августе 500, за 2019 всего суммарно 1500. вот он так и выводит, но только в каждом месяце добавляет пустые строки (4 сентябрь пустых, 2 в августе)
По секрету скажу, что Excel замечательно открывает HTML файлы и даже XML, на худой конец, и даже лучше чем CSV. HTML таблицы легко "готовить", можно использовать какое-никакое оформление (цвет, заголовки и пр.), объединение ячеек.У нас всё ещё проще - все отчёты экспортируются в *.csv-файлы через разделитель ";" между значениями. И глобальными политиками у всех установлено открытие csv в Excel.
После экспорта файлы автоматом открываются в Excel.
точно, спасибо!если нужны данные только из строк-категорий, то и ходить навигатором надо только по категориям:
nav.GetNext(entry)=> nav.GetNextCategory(enrty)
ну вот нужна кнопка и причем простая выгрузка, без объединений строк и такого подобногоПо секрету скажу, что Excel замечательно открывает HTML файлы и даже XML, на худой конец, и даже лучше чем CSV. HTML таблицы легко "готовить", можно использовать какое-никакое оформление (цвет, заголовки и пр.), объединение ячеек.
P.S. но в CSV можно выгрузить штатно, без написания кода. И казалось бы "чего тут сложного?", но у нас таких пользователей единицы, всем специальную кнопку подавай...
Ну, тогда Вью Навигатор + Вью Энтри и вперёд. Ничего сложного не вижу.ну вот нужна кнопка и причем простая выгрузка, без объединений строк и такого подобного
Я в курсе У нас раньше (когда свой продукт писали) так и было. А здесь в csv, т.к. не нужны эти цвета и прочее.По секрету скажу, что Excel замечательно открывает HTML файлы и даже XML, на худой конец, и даже лучше чем CSV. HTML таблицы легко "готовить", можно использовать какое-никакое оформление (цвет, заголовки и пр.), объединение ячеек.
Если вид сложной структуры, то нужно программирование, например чтобы при экспорте игнорировать колонки типа иконок и т.д. или вообще использовать конфигуратор для задания списка колонок для экспорта.P.S. но в CSV можно выгрузить штатно, без написания кода.
Если пересылать по почте или открывать по ссылке с web этот .csv в кодировке win-1251, то он кракозябит на эплах и разных линуксах и поэтому делаю два файла, дополнительно в utf-8.У нас всё ещё проще - все отчёты экспортируются в *.csv-файлы через разделитель ";" между значениями. И глобальными политиками у всех установлено открытие csv в Excel.
После экспорта файлы автоматом открываются в Excel.
Sub CreateFileCSV (view As Notesview, SessionID As String, FileName As String, dt As String , filecodepage As String, textorder As String)
Dim fileNum As Integer
Dim entry As NotesViewEntry
Dim vc As NotesViewEntryCollection
Dim doc As NotesDocument
Dim rowstring As String
Dim cns As String
fileNum% = Freefile()
If filecodepage="UTF-8" Then
Open filename For Output As fileNum% Charset="UTF-8" ''вариант UTF-8. для Apple, но открывается на WIN с кракозябами
Else
''Запуск без параметра Charset="Windows-1251" генерит файл по умолчанию в кодировке платформы на котрой Domino. Соответственно на винде 1251.
Open filename For Output As fileNum% Charset="Windows-1251"
Print #fileNum%, textorder+" "+dt
Print #fileNum%, "№;Артикул;Наименование;Количество;Упаковка;"+textorder
' now get and print the values for each row and column
Set vc = view.GetAllEntriesByKey(SessionID, True) ' коллекшон сортированный по view
Set entry = vc.GetFirstEntry()
n = 1
While Not entry Is Nothing
Set doc = entry.Document
rowstring = Cstr(n)+";"+Cstr(doc.CatalogNumber(0))+";"+Cstr(doc.Title(0))+";"+Cstr(doc.Attribute(0))+";"+Cstr(doc.Packing(0))+";"+Cstr(doc.Qty(0))
Print #fileNum%, rowstring
n = n + 1
Set entry = vc.GetNextEntry(entry)
Wend
Close fileNum%
End Sub
спасибо. уже разобралась, но и ваш код сейчас тоже попробуюЕсли пересылать по почте или открывать по ссылке с web этот .csv в кодировке win-1251, то он кракозябит на эплах и разных линуксах и поэтому делаю два файла, дополнительно в utf-8.
Код:Sub CreateFileCSV (view As Notesview, SessionID As String, FileName As String, dt As String , filecodepage As String, textorder As String) Dim fileNum As Integer Dim entry As NotesViewEntry Dim vc As NotesViewEntryCollection Dim doc As NotesDocument Dim rowstring As String Dim cns As String fileNum% = Freefile() If filecodepage="UTF-8" Then Open filename For Output As fileNum% Charset="UTF-8" ''вариант UTF-8. для Apple, но открывается на WIN с кракозябами Else ''Запуск без параметра Charset="Windows-1251" генерит файл по умолчанию в кодировке платформы на котрой Domino. Соответственно на винде 1251. Open filename For Output As fileNum% Charset="Windows-1251" Print #fileNum%, textorder+" "+dt Print #fileNum%, "№;Артикул;Наименование;Количество;Упаковка;"+textorder ' now get and print the values for each row and column Set vc = view.GetAllEntriesByKey(SessionID, True) ' коллекшон сортированный по view Set entry = vc.GetFirstEntry() n = 1 While Not entry Is Nothing Set doc = entry.Document rowstring = Cstr(n)+";"+Cstr(doc.CatalogNumber(0))+";"+Cstr(doc.Title(0))+";"+Cstr(doc.Attribute(0))+";"+Cstr(doc.Packing(0))+";"+Cstr(doc.Qty(0)) Print #fileNum%, rowstring n = n + 1 Set entry = vc.GetNextEntry(entry) Wend Close fileNum% End Sub
Обучение наступательной кибербезопасности в игровой форме. Начать игру!