Макрос отображает нули вместо слова

Автор georgiy123, 2 апреля 2020, 09:33

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

georgiy123

Всем привет ребята !
Столкнулся с проблемой . у меня есть макрос  , который вставляет из папки каждый тхт файл как отдельный лист .
Все работало прекрасно, но появились изменения в тхт файлах. Теперь вместо 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

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


c.setvalue(a(cl))
заменить на
c.setstring(a(cl))
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

georgiy123

Большое спасибо , сработало , но появилась новая проблема .
Я извиняюсь что не скинул макрос  до конца , но теперь у меня пропало условное форматирование в столбце 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

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

Если в массиве могут быть нули, то прибавить допустим 1000
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

georgiy123

Спасибо большое , нашел решение.
Изменил

case 0 to 2, 5 to 7


на

case 1 to 2, 5 to 7

и всё заработало !