Ir ao conteúdo
  • Cadastre-se

Crafteribanez

Membro Pleno
  • Posts

    97
  • Cadastrado em

  • Última visita

posts postados por Crafteribanez

  1. Boa tarde

     

    Estou tentando no Python => Google Colab o seguinte procedimento sem êxito.

    Encontrar todas as ocorrências de um texto e localizar o índice de cada ocorrência.

    Pretendo exportar os resultados obtidos para um arquivo externo.

     

    Código até o momento:

    from google.colab import files
    
    arquivo = files.upload()
    
    
    
    pip install pdfminer.six
    
    
    
    from pdfminer.high_level import extract_text
    
    texto = extract_text('dopa.pdf')
    
    print(texto)
    
    
    
    print("Termo Aditivo " + str(texto.count('EXTRATO DE TERMO ADITIVO')))

     

    Este código me retorna a quantidade de ocorrências, porém precisaria encontrar os índices das 4 ocorrências para poder extrair as strings.

    Depois do texto, sempre tem o número do aditivo, é o que me interessa;

     

    Aceito sugestões.

    Grato.

     

     

     

     

     

     

     

     

  2. Boa Noite

     

    No Google Sheets (Planilhas), há uma função Query que ajuda muito a fazer consultas em outras bases parametrizadas, utilizando princípios do SQL ( Select, where, From, etc .....).
    Também encontrei em diversos sites maneiras de criar campos calculados dentro da query, incluindo novos campos.

     

    O problema: Para valores numéricos, consegui facilmente criar um campo calculado dentro do query obtendo o resultado, porém para diferenças entre datas, isto não foi possível, ou, não conheço o método correto.

    Retorna mensagem de erro que os campos não são numéricos.

    Más se for feito diretamente na planilha um menos o outro, o resultado aparece normalmente.

     

    Alguém teria um exemplo de cálculo entre dadas no query do Google sheets por acaso ? (Criação de campo calculado )

    Grato.

  3. Option Explicit
    
        Dim cn As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim sql As String
        Dim x As Integer
        Dim i As Long
    
    
    Sub Consolida()
    
        Application.ScreenUpdating = False
    
        Dim arq(1 To 3) As String
        Dim WB1 As Workbook
        Dim WS1 As Worksheet
        Dim ULD As Long
        Dim i As Integer
        
        Set WB1 = ActiveWorkbook
        Set WS1 = WB1.Sheets("Dados")
        Set cn = New ADODB.Connection
        Set rs = New ADODB.Recordset
        
        WS1.Select
        Cells.Clear
        
        arq(1) = "\\caminho" & "\Arquivo01.xlsx"
        arq(2) = "\\Caminho" & "\Arquivo02.xlsx"
        arq(3) = "\\Caminho" & "\Arquivo03.xlsx"
        
        For i = Plan2.Range("Célula alvo").Value To (UBound(arq))
        
            With cn
                .Provider = "Microsoft.ACE.OLEDB.12.0"
                .ConnectionString = "Data Source=" & arq(i)
                .Properties("Extended Properties") = "Excel 8.0;HDR=YES"
                .Open
            End With
            
            sql = "Select * from [Planilha$]"
            
            rs.Open sql, cn, adOpenKeyset, adLockOptimistic
            
            WS1.Activate
            ULD = WS1.Cells(Rows.Count, 1).End(xlUp).Row
            WS1.Range("A" & ULD + 1).CopyFromRecordset rs
            
            For x = 1 To rs.Fields.Count
                WS1.Cells(1, x) = rs.Fields(x - 1).Name
            Next x
            
            cn.Close
        
        Next i
        
        Set cn = Nothing
        Set rs = Nothing
        
        Plan1.Activate
        
        MsgBox "Consolidação concluída ! "
        Plan2.Activate
        
        Application.ScreenUpdating = False
    
    End Sub

     

    Eu utilizo esta macro para juntar meus arquivos, que tem colunas iguais.

    Ativar a Referência "Microsoft Activex Data Objects 2.8 Library" ou superior para utilização da macro

     

    Adaptar conforme sua pasta de trabalho e planilhas.
    Felicidades.

  4. Adaptei uma função de verificação que encontrei em um site e funcionou bem.

    Criei um array para os 6 valores da planilha.

     

    Function verificar(vRegiao As Range) As Integer
    
    Dim vValores(6)
    Dim b As Variant
    Dim i As Integer
    Dim vContagem As Integer
    Dim w As Range
    
    vContagem = 0
    
    vValores(1) = Plan1.Range("C3").Value
    vValores(2) = Plan1.Range("D3").Value
    vValores(3) = Plan1.Range("E3").Value
    vValores(4) = Plan1.Range("F3").Value
    vValores(5) = Plan1.Range("G3").Value
    vValores(6) = Plan1.Range("H3").Value
    
    For Each w In vRegiao
    
        For i = 1 To UBound(vValores)
    
            If vValores(i) = w.Value Then
                vContagem = vContagem + 1
            End If
        
        Next i
    
    Next w
    
    verificar = vContagem
    
    End Function

    Site original para procura com String em Array :

    https://planilhando.com.br/forum/vba-macros/buscar-string-dentro-de-array/

     

    Anexei a tua planilha com esta função VBA

    Acho que atende.
    Dá um grito se não for isto.
    Feliciddes.

     

     

    clube hardware1.7z

  5. Boa tarde

    Função no Excel pronta para este propósito não encontrei, porém criei agora, uma função personalizada que talvez te atenda.

    Function junta(celula As Range) As String
    
        'Teste condicional: Se na célula F1 célula do critério estiver vazia
        If Plan1.Range("F1").Value = "" Then
            'Retorna para a função "Não encontrado"
            junta = "Não encontrado"
        'Caso contrário
        Else
    
            'Delcaração de veriáveis
            Dim uld As Long
            Dim a As Long
            Dim vCriterio As Integer
            Dim vTexto As String
            
            'Busca o valor do critério
            vCriterio = Plan1.Range("F1").Value
            'inicia a variável texto com vazio
            vTexto = ""
            
            'Verifica a última linha da coluna "A" da planilha 1 para looping for
            uld = Plan1.Cells(Rows.Count, 1).End(xlUp).Row
            
            'Inicia o looping for
            For a = 2 To uld
            
                'Se a célula da coluna A da linha "a" for igual ao critério
                If Plan1.Range("A" & a).Value = vCriterio Then
                
                    'Acrescenta a variável vTexto o conteúdo da celula atual do looping
                    vTexto = vTexto & " - " & Plan1.Range("B" & a).Value
                
                End If
            
            Next a
            
            'Retorna para a função o texto concatenado de todos os critérios
            junta = vTexto
        
        End If
    
    End Function

     

    Inseri no posto o arquivo que criei com a macro.
    Dá uma olhada na função.

    Tentei descrever cada linha do código para melhor entendimento.

    Se te servir altera de acordo com as tuas planilhas.

    Felicidades.

     

    Função Junta.7z

  6. Boa tarde

    Trabalho em meus projetos tanto com planilhas direto, bem como com userforms (Formulários).
    Em ambos é possível retornar valores desejados.

    No caso dos userforms pode-se com certeza armazenar resultados em planilhas, faço isto direto.
    Poderia ser mais específico na questão ?
    Acredito que o que desejas seja possível, mesmo não tendo entendido bem a questão.

    • Amei 1
  7. Bom dia.

    Não tenho por procedimento utilizar planilhas compartilhadas.

    Para estas necessidades em que temos vários usuários geralmente utilizo um arquivo por pessoa em ambiente de rede com consulta sql, para os que somente "consultam" e procedimento de gravação para os que modificam. Base de dados separada em arquivo no servidor.

    Fica como dica.

    Provavelmente no fórum, haverá quem tenha melhor conhecimento em compartilhadas.

    Se necessitar informações de como proceder sql para consultas. Contate.

    Felicidades.

  8. Boa noite Marina
    Não sei se já conseguiste resolver esta questão.
    Olhei tua planilha e não vi datas inseridas em nenhum local, então acredito que desejas inserir isto de forma automática.
    Pode-se fazer um monitoramente de células de uma planilha e através de uma "mudança" ou inserção de valores em um local, registrar em outra planiha, a data desta ocorrência, usuário logado e célula alvo.
    Tenho alguns projetos em que registro alterações de valores em células e usuários que as procedeu, para fins de registro.
    Não sei se é isto que desejas.
    Caso tenha resolvido, felicidades, caso ainda não podes descrever melhor o problema.

    Boa noite e felicidades.
     

  9. Boa noite

     

    Diretamente por funções de planilha não encontrei uma função que atendesse esta necessidade, porém via VBA, tem esta aqui que funciona.

     

    A única coisa que tens que cuidar é o indice de ColorIndex do VBA.

     

    Function verificaColorIndex(celula As Range)
    
        If celula.Font.ColorIndex = 3 Then
        
            verificaColorIndex = "Vermelho"
            
        ElseIf celula.Font.ColorIndex = 33 Then
        
            verificaColorIndex = "Azul-Claro"
            
        Else
        
            verificaColorIndex = "Indefinido"
            
        End If
    
    End Function



     

    Se necessitar auxilio para achar os códigos das cores contata.
    Felicidades.

  10. Boa tarde

     

    Utilizei no Python na entrada entrada de dados a função replace para trocar a vírgula pelo ponto, considerando o cálculo no padrão americano.

    Funciona bem o código, porém gostaria de informações/dicas de como o pessoal está procedendo para programar os cálculos no formato brasileiro.

    Tem algum módulo pronto para isto, formato/visualização ? Ou cada vez que precisar visualizar o formato " Brasileiro => R$ 12.000,00" tem que ficar fazendo o replace ponto por virgula e virgula por ponto ?

    Grato.

     

    from tkinter import *
    
    def bt_click():
        if(str(ed1.get()).replace(",","").isnumeric() and str(ed2.get().replace(",",""))).isnumeric():
            num1= float(ed1.get().replace(",","."))
            num2= float(ed1.get().replace(",","."))     
    
            num3 = num1 + num2
            lb1["text"] = ("%10.2f" %(num3))
    
    janela = Tk()
    janela.title("Calculos")
    
    bt1 = Button(janela,width=10, text="Calcular", command = bt_click)
    bt1.place(x=70, y=100)
    
    ed1 = Entry(janela,width=10)
    ed1.place(x=70, y=30)
    
    ed2 = Entry(janela,width=10)
    ed2.place(x=70, y=60)
    
    lb1 = Label(janela,text="Resultado")
    lb1.place(x=70, y=130)
    
    janela.mainloop()

     

    • Curtir 1
  11. Bom dia
     

    Comecei a testar o Mit AppInventor par criar aplicativos para Android.
    Criei um bem básico e testei no meu Android 7.0 tudo ok.
    Enviei para alguns camaradas testarem e o que tem Android 6.0 me respondeu que aplicativo informa não poder instalar por não ter suporte.

    Gostaria de saber se o Mit AppInventor: http://ai2.appinventor.mit.edu/ tem versão mínima de Android  para rodar aplicativos ou seria problema no celular Android do camarada ?

    Grato por alguma informação.

  12. Bom dia

    Trabalho diretamente com Excel 2010 e 2013. Desde 2018, monitoro resultados em Dashbords criados em Excel com pesquisas em outras planilhas Excel através de SQL.

    Este abaixo é um exemplo de busca de dados com SQL no Excel, ativando a biblioteca "Microsoft ActiveX Data Objects 2.8 Library"

    Questão. Gostaria de começar a desenvolver os Dashbords em LibreOffice Calc visto a facilidade de instalar o aplicativo "Sem licença paga"

    Tem algum local "site" , "ebook" que eu possa consultar onde vejo como é possível este procedimento de SQL no Calc tipo no Excel ? Preciso que seja consulta planilha a planilha pois estou indo buscar dados em outras bases Excel.

    Grato.

    Sub SQLBuscaDados()
    
        Set WS1 = Plan003
        WS1.Activate
        WS1.Cells.Select
        Selection.ClearContents
        
        With cn
            .Provider = "Microsoft.ACE.OLEDB.12.0"
            .ConnectionString = ThisWorkbook.Path & "\Dados.xlsx"
            .Properties("Extended Properties") = "Excel 8.0;HDR=YES"
            .Open
        End With
        
        sql = "Select * from [Dados$]"
        
        rsConsulta.Open sql, cn, adOpenKeyset, adLockOptimistic
        Col = 1
        
        If rsConsulta.EOF = False Then
        
        WS1.Range("A2").Select
        
        For Each FD In rsConsulta.Fields
    
            With WS1.Cells(1, Col)
                .Value = FD.Name
                .Font.Bold = True
                .Interior.Color = RGB(37, 219, 219)
            End With
    
            Col = Col + 1
    
        Next FD
    
            WS1.Cells(2, 1).CopyFromRecordset rsConsulta
            
            Else
            
                MsgBox "Não há dados"
            
            End If
        
        cn.Close
        
        WS1.Range("A2").Select
        
        Set WS1 = Nothing
        
    End Sub

    Faço pesquisas internas do mesmo modo com a mesma bilibioteca referenciando as planilhas internas.

     

  13. Boa Tarde

     

    Criei um formulário para inserção de dados no Word em um arquivo1.

    Recebo os dados para inserir no formulário sempre de  outro arquivo Word.

    Quando abro o formulário do word para inserir os arquivos não consigo copiar do outro arquivo do Word os dados para colar nos campos apropriados do formulário, pois este fica desabilitado..

    Tem algum comando para ser colocado no formulário do Word ou habilitar ou desabilitar algo nas opções do Word que me permita trabalhar com o formulário aberto e ao mesmo tempo copiar os dados de outro arquivo do Word ? Seria copiar do arquivo e colar no formulário.

    Grato por uma ideia.

     

  14. Boa noite.

     

    Estou estudando Português e tentando estudar Javascript junto para ver se consigo unir o útil ao agradável.

    O que estou tentando no momento é fazer um método de busca por dígrafos dentro de uma string.

    A string é uma palavra, não passa disto, somente uma palavra.

    Diz a regra do Português que as letras juntas (ch, nh, lh, rr, ss, xc, e em alguns casos gu e qu são sempre dígrafos não importando a posição em que se encontram na palavra.

    Outra regra diz que as letras juntas (am, an, em, en) especificamente estas são dígrafos somente no início e no meio da palavra, no fim são ditongos.

    Considerando que dígrafos são duas letras e um som(fonema), eu utilizo o código:

    function fonetica(){ 
    
            //Texto a ser procurado
            textoprompt = document.getElementById("palavra").value;
            //Primeira variavel de contagem de dígrafos
            //Modificadores i = Sem case sensitive / g todas as ocorrencias        
            
            //Procura Dígrafos Consonantais
            digrafo1 = textoprompt.match(/Ch|Nh|Lh|RR|SS|XC|SC|GU|QU/ig);
            if(digrafo1 != null){
                    dig1 = digrafo1.length;                
            } else {
                    dig1=0;
            }

    Neste primeiro caso não importa a contagem pois todos são dígrafos de qualquer maneira com exceção de gu qu dependendo da ocasião.

    Porém , no caso abaixo, preciso descobrir a posição de cada elemento do "digrafo2" onde cada um inicia e depois descontar da quantidade total de letras para verificar se o dígrafo não está no final, se estiver, não é dígrafo e não posso contar no resultado.

    Exemplo: A palavra "change" tem 6 letras e 5 fonemas ( considerando que "an" está no meio e é dígrafo portanto somente um som)

    A ideia neste código abaixo era retornar a posição de cada digrafo2 e descontar em código posterior do total de caracteres para ver se esta no inicio ou no meio.

    Este código posicao=.... não está me dando nenhum retorno.

    Agradeço uma ideia. Os alerts que usei foi para ver até onde o código estava chegando.

     digrafo2 = textoprompt.match(/Am|An|Em|En|Im|In|Om|On|Um|Un/ig);
            if (digrafo2 != null){
                    if(digrafo2.length > 1){
                            alert(digrafo2.length);
                            for (i=1 ; i<=digrafo2.length ; i++){
                                    alert("aqui"); 
                                    posicao[i]=textoprompt.search(digrafo2[i]);
                                    alert("aqui2");
                                    alert(posicao[i]);  
    
    
                            }
                    }        

     

    adicionado 28 minutos depois

    Pessoal, usei indexOf e localizou cada posição.

    Encerrado !

  15. A algum tempo tive este mesmo problema, resolvi com a utilização de mais de uma célula na função SE.

    Arquivo anexo.

    Não achei isto vantajoso, depois de algum tempo, criei uma função em VBA que ficava menos poluída na planilha.

    Más de qualquer forma vai aí o método que encontrei e resolveu naquele momento.

    As últimas 03 colunas observe que são uma junção da função SE, neste modelo consigo colocar quantos níveis quiser, somente ir colocando cada 7 Se's em uma coluna e referenciar esta nova coluna (célula) ao final da coluna anterior.

    Boa sorte!

    15 Niveis Funcao SE.xls

  16. Boa tarde

     

    Necessito alterar o código para abrir um arquivo Excel com senha via SQL

     

    Sub Clientes()
    
        Dim cn As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim sql As String
        Dim x As Integer
        Dim Cliente As String
        
        Application.ScreenUpdating = False
        
        Cliente = Sheets("Relatorio").Range("A1")
        
        Set cn = New ADODB.Connection
        cn.Provider = "Microsoft.Ace.oledb.12.0"
        
        cn.ConnectionString = "Data Source=" & ThisWorkbook.Path & "\Clientes.xls;Extended Properties=Excel 12.0"
        cn.Open
        Sheets("Relatorio").Select
        Cells.Clear
        
        sql = "select * from [Base1$]"
        Set rs = New ADODB.Recordset
        
        rs.Open sql, cn
        Sheets("Relatorio").Range("A3").CopyFromRecordset rs
        
        For x = 1 To rs.Fields.Count
            Cells(2, x) = rs.Fields(x - 1).Name
        Next x
        
        rs.Close
        cn.Close
        Set rs = Nothing
        Set cn = Nothing
        
    End Sub

    Já procurei especificamente sobre SQL com senha para abrir Excel, porém não encontrei nada.

    A senha para este modelo é "teste". Em que parte do código insiro a senha ?

    Grato.

     

  17. Perfeito.

    Set SH2 = Plan1 é mais lógico sendo na mesma pasta de trabalho.

     

    Porém como geralmente trabalho com duas pastas de trabalhos, a referência ao nome interno de uma planilha em outra pasta de trabalho seria possível ou utilizamos o modo "convencional'  set sh3 = worksheets("Cadastro").

     

    A questão tem seu valor pois utilizamos planilhas em rede e que facilmente usuários podem renomear planilhas sem a prévia comunicação, prejudicando assim as rotinas de VBA.

     

  18. Boa Tarde

     

    Como referenciar no vba as planilhas pela propriedade (Name) primeira da listagem e não pela propriedade Name.

     

    Exemplo, aqui refencio pelo nome que está na aba da planilha

    Dim WK2 As Workbook

    Dim SH2 As Worksheet

    Set WK2 = ActiveWorkbook
    Set SH2 = WK2.Worksheets("Clientes")

     

    Agora na expressão:

    Set SH2 = WK2.Worksheets("Plan1")  gostaria de referenciar a propriedade (Name) Plan1

    Tentei

    Set SH2 = WK2.Plan1 - Não aceita

    Set SH2 = WK2.(Plan1) - Não aceita

    Set SH2 = WK2.[Plan1] - Não aceita.

     

    Aceito sugestões.

    Grato.

     

     

     

  19. Boa Tarde

     

    Por um equívoco, consegui desconfigurar as janelas do VBA no Excel. Janela Explorer, Propriedades e Código.

    Eu fico movimentando sempre as janelas e quando clico para encaixar, só encaixa na horizontal. Fica muito ruim a visualização.

    Não consigo mais encaixar como default Explorer e Properties na esquerda uma em cima da outra e e a janela de códigos na direita ocupando a maioria do espaço.

    Alguma sugestão de comando para voltar ao default da IDE ?

    Grato.

     

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!