Ir ao conteúdo
  • Cadastre-se

pedroch

Membro Pleno
  • Posts

    22
  • Cadastrado em

  • Última visita

  1. @Swalls obrigado pela resposta. Sim, meu conhecimento é básico mas estou tentando fazer esse projeto pois é um desafio que me deram no meu trabalho. Obrigado pelas dicas, vou tentar aqui ver se consigo avançar no código.
  2. Olá, sou iniciante na programação de python e preciso extrair varios dados de medição que veem da minha empresa em pdf e colocar eles em excel para que a engenharia consiga analisar facilmente. Os pdfs vem nesse formato e eu quero extrair massivamente todos os pdfs de um caminho especificado de modo que ele organize os dados assim no excel. Não posso instalar java pra usar a biblioteca camelot ou tabula, to tentando usar o pdfplumer e fiz um teste com um arquivo apenas e deu parcialmente certo, mas ficou meio bagunçado. A ideia é que ele extraia em massa e empilhe tabela a tabela no excel de acordo com a ordenação das amostras ex de 1 a 12 conforme os relatorios que ele ler. import pdfplumber import pandas as pd def extract_tables_from_pdf(pdf_path): tables = [] with pdfplumber.open(pdf_path) as pdf: for page in pdf.pages: # Extrai o texto da página text = page.extract_text() # Verifica se o cabeçalho da tabela está presente na página if 'No.' in text and 'measurement item' in text and 'mes.' in text \ and 'value' in text and 'units' in text and 'design val.' in text \ and 'upper limit' in text and 'lower Limit' in text and 'res.' in text: # Extrai a tabela como um DataFrame do Pandas table = page.extract_table() tables.append(table) return tables # Substitua 'caminho_para_o_seu_pdf' pelo caminho do seu PDF pdf_path = r"XXXX.pdf"exemplo.pdf pdf_tables = extract_tables_from_pdf(pdf_path) # Salvar as tabelas em arquivos Excel for i, table in enumerate(pdf_tables): df = pd.DataFrame(table[1:], columns=table[0]) # Ignorar a primeira linha (cabeçalho) e criar DataFrame excel_file = f"tabela_{i+1}.xlsx" # Nome do arquivo Excel df.to_excel(excel_file, index=False) # Salvar DataFrame como Excel print(f"Tabela {i+1} salva como {excel_file}") formato esperado no excel formato como saiu com o código que escrevi exemplo.pdf
  3. @Midori deu certo, eu fiz assim e também foi um resultado positivo, obrigado pelas dicas: Sub CopiarPDFsSimplificadosCERTA() Dim rngBuscas As Range Dim termo As Range Dim pastaOrigem As String, pastaDestino As String Dim arquivo As String Dim termosNaoEncontrados As String Dim linha As Integer Dim totalCopiados As Integer, totalNaoEncontrados As Integer Application.ScreenUpdating = False With ThisWorkbook.Sheets("Sheet1").Range("E2:E76") ' Centralizar o texto .HorizontalAlignment = xlCenter ' Pintar as células de amarelo .Interior.Color = RGB(226, 239, 218) ' Adicionar moldura .Borders.LineStyle = xlContinuous .Borders.Weight = xlThick ' Deixar o texto em negrito .Font.Bold = True End With ' Inicialize os contadores totalCopiados = 0 totalNaoEncontrados = 0 ' Use FileDialog para obter o diretório With Application.FileDialog(msoFileDialogFolderPicker) .Title = "Selecione a pasta de origem dos PDFs" If .Show = -1 Then pastaOrigem = .SelectedItems(1) & "\" Else MsgBox "Nenhuma pasta de origem selecionada. A cópia de PDFs foi cancelada." Exit Sub End If .Title = "Selecione a pasta de destino" If .Show = -1 Then pastaDestino = .SelectedItems(1) & "\" Else MsgBox "Nenhuma pasta de destino selecionada. A cópia de PDFs foi cancelada." Exit Sub End If End With ' Defina o intervalo de busca Set rngBuscas = ThisWorkbook.Sheets("Sheet1").Range("A2:A" & ThisWorkbook.Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row) ' Limpe a coluna E ThisWorkbook.Sheets("Sheet1").Columns("E:E").Clear linha = 2 ' Verifique se a célula E1 está vazia If ThisWorkbook.Sheets("Sheet1").Range("E1").Value <> "" Then ' Se a célula E1 não estiver vazia, insira uma nova linha no início da coluna E ThisWorkbook.Sheets("Sheet1").Rows(1).Insert End If ' Adicione o título "Termos não encontrados" na célula E1 ThisWorkbook.Sheets("Sheet1").Range("E1").Value = "Termos não encontrados" ' Verifique cada termo de pesquisa For Each termo In rngBuscas If termo.Value <> "" Then Dim encontrado As Boolean encontrado = False ' Divida o termo de pesquisa em palavras Dim palavras As Variant palavras = Split(termo.Value, " ") ' Verifique se todas as palavras estão presentes no nome do arquivo arquivo = Dir(pastaOrigem & "*.pdf") Do While arquivo <> "" Dim todasPalavrasPresentes As Boolean todasPalavrasPresentes = True For Each palavra In palavras If InStr(1, arquivo, palavra, vbTextCompare) = 0 Then todasPalavrasPresentes = False Exit For End If Next palavra If todasPalavrasPresentes Then ' Se o arquivo existir, copie para a pasta de destino FileCopy pastaOrigem & arquivo, pastaDestino & arquivo totalCopiados = totalCopiados + 1 encontrado = True Exit Do End If arquivo = Dir Loop ' Se o arquivo não existir, adicione o termo à lista de termos não encontrados If Not encontrado Then ThisWorkbook.Sheets("Sheet1").Cells(linha, "E").Value = termo.Value linha = linha + 1 totalNaoEncontrados = totalNaoEncontrados + 1 End If End If Next termo ' Exiba uma caixa de mensagem com o número total de arquivos copiados e não encontrados MsgBox "Operação finalizada. Total de " & totalCopiados & " arquivos copiados com sucesso. Total de " & totalNaoEncontrados & " termos não encontrados.", vbInformation ' Centralize os termos não encontrados na coluna E With ThisWorkbook.Sheets("Sheet1").Range("E1") .Font.Bold = True End With With ThisWorkbook.Sheets("Sheet1").Columns("E:E") .HorizontalAlignment = xlCenter End With Application.ScreenUpdating = True End Sub
  4. Tentei aqui mas infelizmente a IA só me atrapalhou. Meu nível de conhecimento não é tão avançado, não consegui implementar as sugestões que você falou
  5. sim, esses da coluna A são os arquivos que eu to procurando. Caso algum deles não for achado eu quero que ela retorne na coluna E o que ele não achou para eu saber se está faltando alguma coisa
  6. Bom dia pessoal, Consegui com ajuda do chat gpt fazer uma macro que copia os arquivos da coluna, os busca na pasta de origem e cola na pasta de destino que eu escolher. Até ai tudo bem, ele acerta bem. Porém agora eu queria que ele retornasse em qualquer coluna a lista dos itens da coluna A que não foram encontrados na busca para eu saber se algum arquivo não foi encontrado porém mesmo com o chat gpt me ajudando ele apresenta problemas e não chega a lugar nenhum. Alguém conseguiria me ajudar? A macro original que citei está no modulo 1 O módulo 9 o chat gpt me ajudou, ele encontra os arquivos que eu peço mas ele me retorna na lista como se não tivesse encontrado os arquivos, mas está errado. Qual seria o erro? Aceito sugestões, não sei usar python mas pode ser mais simples... ou pode ser um erro bobo que está acontecendo Copiar e colar pdfs de ordens - Copy.xlsx
  7. Olá pessoal... Ao editar alguns relátorios no word, a tecla TAB não está mais funcionando como deveria. Normalmente quando clicava tab, o word fazia automaticamente o recuo de um parágrafo. Agora ao apertar a tecla o texto não se mexe e parece bloqueado. Já tentei de tudo e não consegui resolver. Alguém saberia me dizer o que seria?
  8. Boa tarde @Luiz Damasio Dei uma olhada por cima no teu problema e a dica que eu dou é fazer um resumo de todas as condições possíveis que possam acontecer, pois como tem várias possibilidades é bom fazer um resumo de tudo o que pode acontecer. Feito isso, depois de revisar todos os cenários possíveis, eu partiria para a implementação das fórmulas com as condições que você levantou. Muito provavelmente vai ficar uma fórmula bem grande com vários SE aninhados (SE(SE(SE...)... Essa é uma saída, a maior dificuldade é prever todas as possiblidades e talvez criar uma formula simples como "prova real" para arrumar manualmente os casos mais difíceis ou exceções. O problema em si é simples, o difícil é pensar em todas as condições. Espero que tenha dado uma ajuda!
  9. @Basole Olá, agora deu certo! Muito obrigado! O código está rodando muito bem, porém tenho mais algumas outras dúvidas, caso saiba me responder... É necessário abrir um novo tópico? Sou novo na comunidade @Basole Outra coisa, testando aqui em uma pasta na minha área de trabalho, ela funciona certinho porém ela acaba salvando um pdf fora da pasta, na área de trabalho, como se escapasse um pdf. Como resolveria isso?
  10. @Basole Olá, fiz o que você sugeriu e o problema ainda persiste, ainda está salvando na pasta "mãe" ... Pus em anexo a planilha caso ajude para verificar... Salvar em massa Excel em PDF.7z
  11. Olá a todos da comunidade, Desenvolvi uma macro que atendesse minha necessidade de salvar todos os arquivos com extensão xls, xlsm, xlsx em pdf (primeira planilha apenas) contidos na pasta selecionada (e subpastas dentro dela). Ela está funcionando, porém quando existem muitas subpastas a macro não salva o pdf dentro da respectiva subpasta do arquivo, mas sim na pasta "mãe" conforme a foto abaixo: Tem alguma maneira de resolver esse probleminha? Segue o código: Sub BatchOpenMultiplePSTFiles() Dim objShell As Object Dim objWindowsFolder As Object Dim strWindowsFolder As String Application.ScreenUpdating = False Application.EnableEvents = False Application.DisplayAlerts = False Application.DisplayStatusBar = False ActiveSheet.DisplayPageBreaks = False Application.Calculation = xlCalculationManual 'Select the specific Windows folder Set objShell = CreateObject("Shell.Application") Set objWindowsFolder = objShell.BrowseForFolder(0, "Selecione a pasta que contenha os arquivos Excel que deseja salvar em PDF:", 0, "") If Not objWindowsFolder Is Nothing Then strWindowsFolder = objWindowsFolder.self.Path & "\" Call ProcessFolders(strWindowsFolder) 'Open the windows folder Shell "Explorer.exe" & " " & strWindowsFolder, vbNormalFocus MsgBox "Concluído com sucesso!" End If Application.DisplayStatusBar = True Application.Calculation = xlCalculationAutomatic End Sub Sub ProcessFolders(strPath As String) Dim objFileSystem As Object Dim objFolder As Object Dim objFile As Object Dim objExcelFile As Object Dim objWorkbook As Excel.Workbook Dim strWorkbookName As String Set objFileSystem = CreateObject("Scripting.FileSystemObject") Set objFolder = objFileSystem.GetFolder(strPath) For Each objFile In objFolder.Files strFileExtension = objFileSystem.GetExtensionName(objFile) If LCase(strFileExtension) = "xls" Or LCase(strFileExtension) = "xlsx" Or LCase(strFileExtension) = "xlsm" Then Set objExcelFile = objFile Set objWorkbook = Application.Workbooks.Open(objExcelFile.Path) On Error Resume Next 'Selecionar quais abas salvar em PDF. Neste caso, somente a primeira; Se quiser outras, setar Array(1,2,3,...) objWorkbook.Sheets(Array(1)).Select strWorkbookName = Left(objWorkbook.Name, (Len(objWorkbook.Name) - Len(strFileExtension)) - 1) ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strPath & strWorkbookName & ".pdf", _ Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _ :=False, OpenAfterPublish:=False objWorkbook.Close False End If Next 'Process all folders and subfolders If objFolder.SubFolders.Count > 0 Then For Each objSubFolder In objFolder.SubFolders If ((objSubFolder.Attributes And 2) = 0) And ((objSubFolder.Attributes And 4) = 0) Then ProcessFolders (objSubFolder.Path) End If Next End If End Sub
  12. Olá, estou com dificuldade de elaborar uma macro que copie o intervalo A2:E2 da planilha "Requisição" para a outra planilha "Banco de Dados". A ideia é utilizar ela como uma planilha de requisição, logo preciso que sempre que for adicionados novos dados neste intervalo, ele copie e cole no banco de dados sempre na primeira linha em branco do banco de dados para que não salve em cima do ultimo registro e nem no cabeçalho. Segue a planilha de exemplo em anexo. Banco de dados.xlsx
  13. Bom dia à todos da comunidade. Estou com bastante dificuldade de adaptar as duas macros a seguir. A minha necessidade é que não necessito salvar todas as planilhas dos arquivos em pdf, apenas algumas determinadas dependendo da pasta que eu rodar a macro. Tem alguma maneira de escolher quais planilhas eu desejo ou de setar para sempre salvar a "plan1", "plan2" em pdf? Segue as duas macros: MACRO 1 Sub BatchOpenMultiplePSTFiles() Dim objShell As Object Dim objWindowsFolder As Object Dim strWindowsFolder As String 'Select the specific Windows folder Set objShell = CreateObject("Shell.Application") Set objWindowsFolder = objShell.BrowseForFolder(0, "Select a Windows folder:", 0, "") If Not objWindowsFolder Is Nothing Then strWindowsFolder = objWindowsFolder.self.Path & "\" Call ProcessFolders(strWindowsFolder) 'Open the windows folder Shell "Explorer.exe" & " " & strWindowsFolder, vbNormalFocus End If End Sub Sub ProcessFolders(strPath As String) Dim objFileSystem As Object Dim objFolder As Object Dim objFile As Object Dim objExcelFile As Object Dim objWorkbook As Excel.Workbook Dim strWorkbookName As String Set objFileSystem = CreateObject("Scripting.FileSystemObject") Set objFolder = objFileSystem.GetFolder(strPath) For Each objFile In objFolder.Files strFileExtension = objFileSystem.GetExtensionName(objFile) If LCase(strFileExtension) = "xls" Or LCase(strFileExtension) = "xlsx" Then Set objExcelFile = objFile Set objWorkbook = Application.Workbooks.Open(objExcelFile.Path) strWorkbookName = Left(objWorkbook.Name, (Len(objWorkbook.Name) - Len(strFileExtension)) - 1) objWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strPath & strWorkbookName & ".pdf" objWorkbook.Close False End If Next 'Process all folders and subfolders If objFolder.SubFolders.Count > 0 Then For Each objSubFolder In objFolder.SubFolders If ((objSubFolder.Attributes And 2) = 0) And ((objSubFolder.Attributes And 4) = 0) Then ProcessFolders (objSubFolder.Path) End If Next End If End Sub MACRO 2 Sub BatchExport_Click() Dim fldr As Object, folder As String, fileName As String, outputFolder As String, wb As Workbook, app As Excel.Application '----Select folder---- Set fldr = Application.FileDialog(msoFileDialogFolderPicker) With fldr .Title = "Select folder with Excel files to export to PDF" .AllowMultiSelect = False If .Show <> -1 Then GoTo EndSub folder = .SelectedItems(1) End With '----Output directory--- outputFolder = folder & "\pdf\" On Error Resume Next MkDir (outputFolder) On Error GoTo 0 Set app = New Excel.Application '---Loop and print to pdf--- fileName = Dir(folder & "\") Do Until fileName = vbNullString Set wb = app.Workbooks.Open(folder & "\" & fileName) PrintWBToPDF wb, outputFolder & GetFileFromPath(fileName) wb.Close fileName = Dir() Loop app.Quit Set app = Nothing EndSub: MsgBox "Finished!" End Sub Sub PrintWBToPDF(wb As Workbook, fileName As String, _ Optional vQuality = xlQualityStandard, _ Optional vIncDocProperties = True, _ Optional vIgnorePrintAreas = False, _ Optional vOpenAferPublish = False) wb.ExportAsFixedFormat _ Type:=xlTypePDF, _ fileName:=fileName, _ Quality:=vQuality, _ IncludeDocProperties:=vIncDocProperties, _ IgnorePrintAreas:=vIgnorePrintAreas, _ OpenAfterPublish:=vOpenAferPublish End Sub Function GetFileFromPath(ByVal strPath As String) As String If Right$(strPath, 1) <> "\" And Len(strPath) > 0 Then GetFileFromPath = GetFileFromPath(Left$(strPath, Len(strPath) - 1)) + Right$(strPath, 1) End If End Function conversor.7z
  14. Olá, Estou em dúvida em fazer uma fórmula ou macro que seja condicionada pelo intervalo de tempo. Minha situação é: se a hora atual for entre 5hAM até 2h18PM minha célula deve retornar X valor; das 2h19PM até 11h30PM Y valor. Sei que teria que ser feito com a fórmula =se; no entanto não sei trabalhar com essa condição de hora do dia

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!