Макрос с датами

Автор gnus, 8 декабря 2013, 14:56

0 Пользователи и 1 гость просматривают эту тему.

gnus

Решил сделать макрос для writer, который в таблице создает строки. нумерует их и заполняет определенными датами (согласно расписанию). Это для учительского каллендарно-тематического планирования. Забуксовал на этапе, когда нужно добавить исключения, т.е. есть, например определенный список дат (праздничных дней), которые не должны учитываться (создаваться в таблице). Подскажите, как это можно сделать. Недавно перешел на версию 4.1.3.2, в которой изменилось значение свойства date поля даты, т.е. если раньше был long формат, то сейчас отдельно .year .month .day в формате struct. Вот код для создания строк в первой четверти. Работающий файл прилагается.

Sub term1
dim frm, checkbox1, checkbox2 as object
Dim countRows1 As Integer
Dim i as Date

frm=ThisComponent.Drawpage.Forms.getByName("form1")
CheckBox1=frm.getByName("checkbox1")
CheckBox2=frm.getByName("checkbox2")
CheckBox3=frm.getByName("checkbox3")
CheckBox4=frm.getByName("checkbox4")
CheckBox5=frm.getByName("checkbox5")
CheckBox6=frm.getByName("checkbox6")

term1start=frm.getByName("term1start")
term11start=dateserial(term1start.date.year, term1start.date.month, term1start.date.day)
term1end=frm.getByName("term1end")
term11end=dateserial(term1end.date.year, term1end.date.month, term1end.date.day)

oTable = ThisComponent.TextTables("com.sun.star.text.TextTable")

countRows1=oTable.Rows.getCount()

n=1
for i=term11start to term11end
'проверяем дату на понедельник
if checkbox1.state=1 then
  if weekday(i)=2 then
  oTable.Rows.insertByIndex(countRows1-7,1) 'вставляем по одной пустой строке строке
oTable(0).getCellByPosition(5,countRows1-7).setString(i) 'вставляем дату
oTable(0).getCellByPosition(0,n+2).setString(n) 'вставляем номер строки
countRows1=countRows1+1
n=n+1
  end if
end if
'проверяем дату на вторник
if checkbox2.state=1 then
  if weekday(i)=3 then
  oTable.Rows.insertByIndex(countRows1-7,1) 'вставляем по одной пустой строке строке
oTable(0).getCellByPosition(5,countRows1-7).setString(i) 'вставляем дату
oTable(0).getCellByPosition(0,n+2).setString(n) 'вставляем номер строки
countRows1=countRows1+1
n=n+1
  end if
end if
'проверяем дату на среду
if checkbox3.state=1 then
  if weekday(i)=4 then
  oTable.Rows.insertByIndex(countRows1-7,1) 'вставляем по одной пустой строке строке
oTable(0).getCellByPosition(5,countRows1-7).setString(i) 'вставляем дату
oTable(0).getCellByPosition(0,n+2).setString(n) 'вставляем номер строки
countRows1=countRows1+1
n=n+1
  end if
end if
'проверяем дату на четверг
if checkbox4.state=1 then
  if weekday(i)=5 then
  oTable.Rows.insertByIndex(countRows1-7,1) 'вставляем по одной пустой строке строке
oTable(0).getCellByPosition(5,countRows1-7).setString(i) 'вставляем дату
oTable(0).getCellByPosition(0,n+2).setString(n) 'вставляем номер строки
countRows1=countRows1+1
n=n+1
  end if
end if
'проверяем дату на пятницу
if checkbox5.state=1 then
  if weekday(i)=6 then
  oTable.Rows.insertByIndex(countRows1-7,1) 'вставляем по одной пустой строке строке
oTable(0).getCellByPosition(5,countRows1-7).setString(i) 'вставляем дату
oTable(0).getCellByPosition(0,n+2).setString(n) 'вставляем номер строки
countRows1=countRows1+1
n=n+1
  end if
end if
'проверяем дату на субботу
if checkbox6.state=1 then
  if weekday(i)=7 then
  oTable.Rows.insertByIndex(countRows1-7,1) 'вставляем по одной пустой строке строке
oTable(0).getCellByPosition(5,countRows1-7).setString(i) 'вставляем дату
oTable(0).getCellByPosition(0,n+2).setString(n) 'вставляем номер строки
countRows1=countRows1+1
n=n+1
  end if
end if
Next
print countRows1 'выводит кол-во строк таблицы
End Sub


[вложение удалено Администратором]