Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

31 Май 2020, 13:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Макрос отображает нули вместо слова  (Прочитано 722 раз)
0 Пользователей и 1 Гость смотрят эту тему.
georgiy123
Участник
**
Offline Offline

Сообщений: 25


« Стартовое сообщение: 2 Апрель 2020, 09:33 »

Всем привет ребята !
Столкнулся с проблемой . у меня есть макрос  , который вставляет из папки каждый тхт файл как отдельный лист .
Все работало прекрасно, но появились изменения в тхт файлах. Теперь вместо 1 2 3(которые идут в стоблик) идут слова (один два три) . Теперь в Libre Calc отображает нули вместо текста в этих столбиках .
Можно ли этот макрос подправить ?


Код:
private sub main
    dim p$, f$, t$, rw&, cl&, a(), i&
    dim wb as object, ws as object, c as object
   
    p="C:\Users\g.nerovniy\Desktop\log\"
    f=dir(p+"*.txt")
    if len(f) then wb=thiscomponent else exit sub
   
    do           
       wb.sheets.insertnewbyname(f,i)
       ws=wb.sheets(i):i=i+1:rw=0
       open p+f for input as #1
            do while not eof(#1)
               line input #1, t
               a=split(t)
               for cl=0 to ubound(a)
                   c=ws.getcellbyposition(cl,rw)
                   select case cl
                       case 0 to 2, 5 to 7
                          c.setvalue(a(cl))
                       case else
                          c.setstring(a(cl))
                   end select
               next
               rw=rw+1
            loop
       close #1
       setFormat ws, rw
       f=dir
    loop while len(f)
    oDoc = ThisComponent

oDoc.Sheets.removeByName("Лист1")
end sub
Записан
Bigor
Мастер
*****
Offline Offline

Пол: Мужской
Сообщений: 912


« Ответ #1: 2 Апрель 2020, 09:52 »

А если в
Код:
case 0 to 2, 5 to 7
          c.setvalue(a(cl))
case else

c.setvalue(a(cl))
заменить на
c.setstring(a(cl))
Записан

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
georgiy123
Участник
**
Offline Offline

Сообщений: 25


« Ответ #2: 2 Апрель 2020, 11:36 »

Большое спасибо , сработало , но появилась новая проблема .
Я извиняюсь что не скинул макрос  до конца , но теперь у меня пропало условное форматирование в столбце F . , оно просто не сработало.
Вот код полный код
Код:

private sub main
    dim p$, f$, t$, rw&, cl&, a(), i&
    dim wb as object, ws as object, c as object
   
    p="C:\Users\g.nerovniy\Desktop\log\"
    f=dir(p+"*.txt")
    if len(f) then wb=thiscomponent else exit sub
   
    do           
       wb.sheets.insertnewbyname(f,i)
       ws=wb.sheets(i):i=i+1:rw=0
       open p+f for input as #1
            do while not eof(#1)
               line input #1, t
               a=split(t)
               for cl=0 to ubound(a)
                   c=ws.getcellbyposition(cl,rw)
                   select case cl
                       case 0 to 2, 5 to 7
                          c.setstring(a(cl))
                       case else
                          c.setstring(a(cl))
                   end select
               next
               rw=rw+1
            loop
       close #1
       setFormat ws, rw
       f=dir
    loop while len(f)
    oDoc = ThisComponent

oDoc.Sheets.removeByName("Лист1")
end sub
 
sub setFormat(ws as object, rw&)
    dim r as object, cf as object
 
    r=ws.getcellrangebyname("f1:f"+rw)
    cf=r.conditionalformat   
   
    condFormat "0.95", "" , "Good", 3, cf
    condFormat "0.9", "0.95", "Neutral", 7, cf
    condFormat "0.85", "0.8999", "Bad", 7, cf
    condFormat "0", "0.85", "Error", 7, cf
   
    r.conditionalformat=cf
   
End Sub
 
sub condFormat(formula1$, formula2$, style$, o&, cf as object)
    dim p(3) As new com.sun.star.beans.PropertyValue
    p(0).name="StyleName"
    p(0).value=style
    p(1).name="Operator"
    p(1).value=o
    p(2).name="Formula1"
    p(2).value=formula1
    if len(formula2) then
       p(3).name="Formula2"
       p(3).value=formula2
    end if       
    cf.addnew(p)


end sub


sub delsave
 odoc=thiscomponent
 oSheet = oDoc.CurrentController.getActiveSheet()
 myrows=oSheet.getrows
 
 rowmax=3000
 rowmin=0
 
 For i=rowmax To rowmin step -1
 textnd = osheet.getcellbyposition(5,i).string
    If textnd >="0,95" Then
      myrows.removebyindex(i,1)
    End if   
 Next i
Dim args(0) As New com.sun.star.beans.PropertyValue
oDoc.storeToURL("file:///C:/Users/g.nerovniy/Desktop/mis.ods", args())
oDoc.close(true)
end sub





Записан
Bigor
Мастер
*****
Offline Offline

Пол: Мужской
Сообщений: 912


« Ответ #3: 2 Апрель 2020, 12:49 »

Можно проверять условие, если значение число, то записывать через c.setvalue(a(cl))
если не число, то через c.setstring(a(cl)) Условие например если val(a(cl))<>0, то число

Если в массиве могут быть нули, то прибавить допустим 1000
Записан

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
georgiy123
Участник
**
Offline Offline

Сообщений: 25


« Ответ #4: 2 Апрель 2020, 14:46 »

Спасибо большое , нашел решение.
Изменил
Код:
case 0 to 2, 5 to 7

на

Код:
case 1 to 2, 5 to 7

и всё заработало !
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!