none
Formatação script RRS feed

  • Pergunta

  • Ola pessoal, seguinte queria gerar um script que me retornassem algumas informações do meu servidor de domínio, procurando pela internet achei um script em vbs que me atenderia muito bem, porem gostaria de tentar no script mesmo deixar algumas formatações prontas, algumas coisas consegui realizar, porem outras procurei bastante e não encontrei como fazer, não domino a linguagem, o pouco que consegui fazer foi pesquisando e na tentativa e erro, segue abaixo o código:

    Set objNetwork = CreateObject("WScript.Network")
    Set objExcel = CreateObject("Excel.Application")

    objExcel.Visible = True
    objExcel.Workbooks.Add
    intRow = 3

    objExcel.Cells(1, 1).Value = "RELATORIO DE USUÁRIO CADASTRADOS NO SERVIDOR"
    objExcel.Cells(2, 1).Value = "NOME COMPLETO"
    objExcel.Cells(2, 2).Value = "LOGIN"
    objExcel.Cells(2, 3).Value = "DESCRIÇÃO"
    rem objExcel.Cells(1, 4).Value = "Email"
    objExcel.Cells(2, 4).Value = "STATUS"
    objExcel.Cells(2, 5).Value = "EXCLUIR"
    objExcel.Cells(2, 6).Value = "OBSERVAÇÃO"

    'strDomain = InputBox ("Digite o dominio, ex.: dominio.com.br")
    strDomain = objNetwork.UserDomain
    Set DomObj = GetObject("WinNT://" & strDomain )
    DomObj.Filter = Array("User")
    For Each objUser In DomObj

     UserPath = GetUserPath(objUser.Name)
     Set objUserLDAP = getobject(UserPath)
        objExcel.Cells(intRow, 1).Value = objUserLDAP.DisplayName
        objExcel.Cells(intRow, 2).Value = objUserLDAP.sAMAccountName
        objExcel.Cells(intRow, 3).Value = objUserLDAP.Description
        rem objExcel.Cells(intRow, 4).Value = objUserLDAP.mail
        objExcel.Cells(intRow, 4).Value = objUserLDAP.AccountDisabled
        intRow = intRow + 1
    Next

    objExcel.Range("A1:F1").Merge
    objExcel.Range("A1").Select
    objExcel.Selection.Interior.ColorIndex = 19
    objExcel.Selection.Font.ColorIndex = 11
    objExcel.Selection.Font.Bold = True
    objExcel.Cells.EntireColumn.AutoFit

    objExcel.Range("A2:F2").Select
    objExcel.Selection.Interior.ColorIndex = 19
    objExcel.Selection.Font.ColorIndex = 11
    objExcel.Selection.Font.Bold = True
    objExcel.Cells.EntireColumn.AutoFit

    MsgBox "Concluído"

    Function getUserPath(byval sUserName)
        set cmd=createobject("ADODB.Command")
        set cn=createobject("ADODB.Connection")
        set rs=createobject("ADODB.Recordset")

        cn.open "Provider=ADsDSOObject;"

        cmd.commandtext = "SELECT adspath from 'LDAP://" & getnc & _
                  "' WHERE objectCategory = 'User' and sAMAccountName = '" & sUserName & "'"
        cmd.activeconnection = cn

        set rs = cmd.execute

        if rs.bof <> true and rs.eof<>true then
            getUserPath=rs(0)
        else
            getUserPath = ""
        end if
        cn.close

    end function

    function getNC
        set objRoot=getobject("LDAP://RootDSE")
        getNC=objRoot.get("defaultNamingContext")
    end function

    Gostaria de saber se seria possível realizar três coisas nesse script, seriam elas:

    1º - A primeira linha da planilha ficar com o texto centralizado (OBS: a linha 1 é mesclada entre as colunas que são utilizadas "A:F").

    2º - Nas colunas utilizadas e linhas inseridas já ativar a borda (Vi que através de código da para inserir a borda se tiver informações, porem as colunas C pode ou não contem informações e a coluna F não contem informações mais gostaria que também tivesse as bordas).

    3º - Por ultimo a coluna status me retorna a informação verdadeiro ou falso, queria saber se é possível substituir ou trabalhar essa informação trocando por Habilitado e Desabilitado.

    segunda-feira, 30 de janeiro de 2017 12:30

Todas as Respostas

  • Uma opção mais fácil, seria você formatar o excel e depois no código, você apenas iria abrir o arquivo, exemplo

    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open _
     ("C:\Scripts\New_users.xls")


    • Editado Carlos_rodrigues segunda-feira, 30 de janeiro de 2017 12:47 correção
    segunda-feira, 30 de janeiro de 2017 12:46
  • Ta mais eu teria que alterar alguma parte do código trocando algo por ""objWorkbook? O problema ai é que são vários servidores de domínio, cada um pode ter uma quantidade diferente de usuários, ou seja, nunca sei quantas linhas precisarei deixar formatada.
    segunda-feira, 30 de janeiro de 2017 13:03
  • O excel suporta até 65 mil linhas, isso com extensão xls, ficaria assim o código

    Set objNetwork = CreateObject("WScript.Network") 
    Set objExcel = CreateObject("Excel.Application")
    
     
     Set objWorkbook = objExcel.Workbooks.Open("C:\Users\carlos.rodrigues\Desktop\teste\teste.xls")
    
     objExcel.Visible = True 
     objExcel.Workbooks.Add 
     intRow = 3 
    
     objExcel.Cells(1, 1).Value = "RELATORIO DE USUÁRIO CADASTRADOS NO SERVIDOR" 
     objExcel.Cells(2, 1).Value = "NOME COMPLETO" 
     objExcel.Cells(2, 2).Value = "LOGIN" 
     objExcel.Cells(2, 3).Value = "DESCRIÇÃO" 
     rem objExcel.Cells(1, 4).Value = "Email" 
     objExcel.Cells(2, 4).Value = "STATUS" 
     objExcel.Cells(2, 5).Value = "EXCLUIR" 
     objExcel.Cells(2, 6).Value = "OBSERVAÇÃO" 
    
     'strDomain = InputBox ("Digite o dominio, ex.: dominio.com.br") 
     strDomain = objNetwork.UserDomain 
     Set DomObj = GetObject("WinNT://" & strDomain ) 
     DomObj.Filter = Array("User") 
     For Each objUser In DomObj 
    
      UserPath = GetUserPath(objUser.Name) 
      Set objUserLDAP = getobject(UserPath) 
         objExcel.Cells(intRow, 1).Value = objUserLDAP.DisplayName 
         objExcel.Cells(intRow, 2).Value = objUserLDAP.sAMAccountName 
         objExcel.Cells(intRow, 3).Value = objUserLDAP.Description 
         rem objExcel.Cells(intRow, 4).Value = objUserLDAP.mail 
         objExcel.Cells(intRow, 4).Value = objUserLDAP.AccountDisabled 
         intRow = intRow + 1 
     Next 
    
     objExcel.Range("A1:F1").Merge 
     objExcel.Range("A1").Select 
     objExcel.Selection.Interior.ColorIndex = 19 
     objExcel.Selection.Font.ColorIndex = 11 
     objExcel.Selection.Font.Bold = True 
     objExcel.Cells.EntireColumn.AutoFit 
    
     objExcel.Range("A2:F2").Select 
     objExcel.Selection.Interior.ColorIndex = 19 
     objExcel.Selection.Font.ColorIndex = 11 
     objExcel.Selection.Font.Bold = True 
     objExcel.Cells.EntireColumn.AutoFit 
    
     MsgBox "Concluído" 
    
     Function getUserPath(byval sUserName) 
         set cmd=createobject("ADODB.Command") 
         set cn=createobject("ADODB.Connection") 
         set rs=createobject("ADODB.Recordset") 
    
         cn.open "Provider=ADsDSOObject;" 
    
         cmd.commandtext = "SELECT adspath from 'LDAP://" & getnc & _ 
                   "' WHERE objectCategory = 'User' and sAMAccountName = '" & sUserName & "'" 
         cmd.activeconnection = cn 
    
         set rs = cmd.execute 
    
         if rs.bof <> true and rs.eof<>true then 
             getUserPath=rs(0) 
         else 
             getUserPath = "" 
         end if 
         cn.close 
    
     end function 
    
     function getNC 
         set objRoot=getobject("LDAP://RootDSE") 
         getNC=objRoot.get("defaultNamingContext") 
     end function

    segunda-feira, 30 de janeiro de 2017 13:28
  • engraçado que, criei uma pasta, criei um arquivo, formatei ele, aterei o caminho no script postado, porem ao executar ele cria um novo, mais a ideia é a seguinte, o relatório não tera 65 mil linhas, porem eu não sei se um ad tera 300 ou 200 ou 100, então como poderia formatar um documento padrão sem saber a quantidade de linhas?
    segunda-feira, 30 de janeiro de 2017 17:33
  • Ninguem mais poderia me auxiliar?
    quinta-feira, 2 de fevereiro de 2017 12:07
  • Removi a opção de abrir uma nova planilha, sugestão e criar uma planilha modelo é apenas inserir o dados necessário.

    Set objNetwork = CreateObject("WScript.Network") 
    Set objExcel = CreateObject("Excel.Application")
    
    Set objWorkbook = objExcel.Workbooks.Open("C:\Users\carlos.rodrigues\Desktop\teste\teste.xls")
    
     objExcel.Visible = True 
    
     intRow = 3 
    
     objExcel.Cells(1, 1).Value = "RELATORIO DE USUÁRIO CADASTRADOS NO SERVIDOR" 
     objExcel.Cells(2, 1).Value = "NOME COMPLETO" 
     objExcel.Cells(2, 2).Value = "LOGIN" 
     objExcel.Cells(2, 3).Value = "DESCRIÇÃO" 
     Rem objExcel.Cells(1, 4).Value = "Email" 
     objExcel.Cells(2, 4).Value = "STATUS" 
     objExcel.Cells(2, 5).Value = "EXCLUIR" 
     objExcel.Cells(2, 6).Value = "OBSERVAÇÃO" 
    
     'strDomain = InputBox ("Digite o dominio, ex.: dominio.com.br") 
     strDomain = objNetwork.UserDomain 
     Set DomObj = GetObject("WinNT://" & strDomain ) 
     DomObj.Filter = Array("User") 
     For Each objUser In DomObj 
    
      UserPath = GetUserPath(objUser.Name) 
      Set objUserLDAP = getobject(UserPath) 
         objExcel.Cells(intRow, 1).Value = objUserLDAP.DisplayName 
         objExcel.Cells(intRow, 2).Value = objUserLDAP.sAMAccountName 
         objExcel.Cells(intRow, 3).Value = objUserLDAP.Description 
         Rem objExcel.Cells(intRow, 4).Value = objUserLDAP.mail 
         objExcel.Cells(intRow, 4).Value = objUserLDAP.AccountDisabled 
         intRow = intRow + 1 
     Next 
    
     objExcel.Range("A1:F1").Merge 
     objExcel.Range("A1").Select 
     objExcel.Selection.Interior.ColorIndex = 19 
     objExcel.Selection.Font.ColorIndex = 11 
     objExcel.Selection.Font.Bold = True 
     objExcel.Cells.EntireColumn.AutoFit 
    
     objExcel.Range("A2:F2").Select 
     objExcel.Selection.Interior.ColorIndex = 19 
     objExcel.Selection.Font.ColorIndex = 11 
     objExcel.Selection.Font.Bold = True 
     objExcel.Cells.EntireColumn.AutoFit 
    
     MsgBox "Concluído" 
    
     Function getUserPath(byval sUserName) 
         set cmd=createobject("ADODB.Command") 
         set cn=createobject("ADODB.Connection") 
         set rs=createobject("ADODB.Recordset") 
    
         cn.open "Provider=ADsDSOObject;" 
    
         cmd.commandtext = "SELECT adspath from 'LDAP://" & getnc & _ 
                   "' WHERE objectCategory = 'User' and sAMAccountName = '" & sUserName & "'" 
         cmd.activeconnection = cn 
    
         set rs = cmd.execute 
    
         if rs.bof <> true and rs.eof<>true then 
             getUserPath=rs(0) 
         else 
             getUserPath = "" 
         end if 
         cn.close 
    
     end function 
    
     function getNC 
         set objRoot=getobject("LDAP://RootDSE") 
         getNC=objRoot.get("defaultNamingContext") 
     end function

    quinta-feira, 2 de fevereiro de 2017 12:45
  • Até tentei fazer script fazer a formatação, porem encontrar os parâmetros usados no vbs para fazer isso não ta fácil, tem uma outra alternativa seria vc levar seu código para o VBA, desse modo seria mais fácil fazer uma macro para formatar seu arquivo 
    quinta-feira, 2 de fevereiro de 2017 13:03
  • Denis,

    Faz um novo teste, usei seu script adicionei a formatação e alterei a parte de status.

    Set objNetwork = CreateObject("WScript.Network") 
     Set objExcel = CreateObject("Excel.Application") 
    
     objExcel.Visible = True 
     objExcel.Workbooks.Add 
     intRow = 3 
    
     objExcel.Cells(1, 1).Value = "RELATORIO DE USUÁRIO CADASTRADOS NO SERVIDOR" 
     objExcel.Cells(2, 1).Value = "NOME COMPLETO" 
     objExcel.Cells(2, 1).HorizontalAlignment = -4108
     objExcel.Cells(2, 2).Value = "LOGIN" 
     objExcel.Cells(2, 3).Value = "DESCRIÇÃO" 
     Rem objExcel.Cells(1, 4).Value = "Email" 
     objExcel.Cells(2, 4).Value = "STATUS" 
     objExcel.Cells(2, 5).Value = "EXCLUIR" 
     objExcel.Cells(2, 6).Value = "OBSERVAÇÃO" 
    
    
     'strDomain = InputBox ("Digite o dominio, ex.: dominio.com.br") 
     strDomain = objNetwork.UserDomain 
     Set DomObj = GetObject("WinNT://" & strDomain ) 
     DomObj.Filter = Array("User") 
     For Each objUser In DomObj 
    
      UserPath = GetUserPath(objUser.Name) 
      Set objUserLDAP = getobject(UserPath) 
         objExcel.Cells(intRow, 1).Value = objUserLDAP.DisplayName 
         objExcel.Cells(intRow, 1).HorizontalAlignment = -4108
         objExcel.Cells(intRow, 2).Value = objUserLDAP.sAMAccountName 
         objExcel.Cells(intRow, 3).Value = objUserLDAP.Description 
         Rem objExcel.Cells(intRow, 4).Value = objUserLDAP.mail 
         If objUserLDAP.AccountDisabled = True then
           objExcel.Cells(intRow, 4).Value = "Habilitado"
         Else
           objExcel.Cells(intRow, 4).Value = "Desabilitado" 
         End if
         
         intRow = intRow + 1 
     Next 
     
     
     objExcel.Range("A1:F1").Merge 
     objExcel.Range("A1").Select 
     objExcel.Selection.Interior.ColorIndex = 19 
     objExcel.Selection.Font.ColorIndex = 11 
     objExcel.Selection.Font.Bold = True  
     objExcel.Cells.EntireColumn.AutoFit 
    
     objExcel.Range("A2:F2").Select 
     objExcel.Selection.Interior.ColorIndex = 19 
     objExcel.Selection.Font.ColorIndex = 11 
     objExcel.Selection.Font.Bold = True 
     objExcel.Cells.EntireColumn.AutoFit 
     
     
    
     MsgBox "Concluído" 
    
     Function getUserPath(byval sUserName) 
         set cmd=createobject("ADODB.Command") 
         set cn=createobject("ADODB.Connection") 
         set rs=createobject("ADODB.Recordset") 
    
         cn.open "Provider=ADsDSOObject;" 
    
         cmd.commandtext = "SELECT adspath from 'LDAP://" & getnc & _ 
                   "' WHERE objectCategory = 'User' and sAMAccountName = '" & sUserName & "'" 
         cmd.activeconnection = cn 
    
         set rs = cmd.execute 
    
         If rs.bof <> true and rs.eof<>true then 
             getUserPath=rs(0) 
          Else 
             getUserPath = "" 
         End if 
         cn.close 
    
     end function 
    
     function getNC 
          Set objRoot=getobject("LDAP://RootDSE") 
          getNC=objRoot.get("defaultNamingContext") 
     end function

     

    • Sugerido como Resposta Carlos_rodrigues quinta-feira, 9 de fevereiro de 2017 01:42
    quinta-feira, 2 de fevereiro de 2017 14:36
  • O atributo HorizontalAlignment é usado para centralizar a célula do excel, ele deve receber o valor -4108 para centralizar
    quinta-feira, 2 de fevereiro de 2017 14:37
  • Denis,

    Conseguiu fazer o teste? caso tenha achado útil não deixe de marcar como resposta.

    quinta-feira, 9 de fevereiro de 2017 01:43