Tecnologia de fusão entre Delphi e Word
1. Significado do código VBA
Microsoft Word é um ambiente integrado e um sistema de processamento de texto da Microsoft Corporation nos Estados Unidos. No entanto, não é de forma alguma apenas um sistema de processamento de texto. Ele integra o Microsoft Visual Basic e pode estender as funções do Word por meio da programação.
O código do Microsoft Visual Basic no Word é a macro do Word. Ao escrever macros do Word, você pode realizar a automação de alguns processamentos de documentos, como backup e salvamento automático de documentos, etc., o que pode expandir as funções dos documentos do Word. Portanto, você pode fazer uso total dos recursos do Word e até mesmo tornar o Word parte de seu próprio software.
As macros do Word têm alguns benefícios, porque podem nos ajudar a automatizar documentos, mas as macros do Word não são puramente benéficas. Às vezes, elas podem danificar nossos documentos, sistemas de computador e até redes, começando com o vírus de macro Taiwan NO1. O atual vírus de macro Melissa passou de. um simples prompt no início, esgotando os recursos do sistema para enviar e-mails aleatórios, enviar informações pessoais para a rede e até mesmo para o Autoexec.bat (arquivo em lote automático) no disco rígido. Adicione Deltree C: -y, destrói todo o sistema Windows.
2. Tecnologia Com incorporada no Word
Pode-se dizer que o Word é o software com melhor suporte para a tecnologia COM. Parece um pouco extremo dizer isso, mas a poderosa tecnologia de interface de programação fornecida pelo Word pode nos permitir controlar qualquer parte do Word por meio de programas. Seja abrindo, salvando, imprimindo ou desenhando tabelas automaticamente em documentos.
Através do software de programação, você pode manipular palavras com flexibilidade. Aqui tomamos apenas o Borland Delphi como exemplo para descrever em detalhes:
1. Como chamar software/arquivos Word no Delphi
Existem três maneiras de chamar o software Word no Word:
. Incorporando Word através do controle TOleContainer do Delphi
a. Use o controle Servers fornecido pelo Delphi para chamar o Word e usar as propriedades do Word.
b. Através da tecnologia Com real, importe todas as bibliotecas de classes no arquivo MSWORD9.OLB no diretório do software Office para o Delphi e use a tecnologia Com para programar
c. Use CreateOleObject para iniciar o Word e controle o Word no modo Ole.
2. Julgamento da dificuldade de vários métodos
a. Incorporar o Word através do controle Delphi TOleContainer
Esta é a incorporação Ole mais simples, que pode chamar diretamente o documento do Word. Você só precisa usar ToleContainer.Run para iniciar o documento do Word diretamente. E o documento Word iniciado desta forma está integrado ao programa Delphi (do ponto de vista da interface), mas tem uma deficiência intransponível, ou seja, o documento Word não pode ser controlado através do Delphi, e o propósito de manipular o Word com flexibilidade não pode ser alcançado.
b. Use o controle Servers fornecido pelo Delphi para chamar o Word e usar as propriedades do Word.
Use o controle de servidores do Delphi para controlar o Word. O Delphi pode implementar prompts de código durante a programação. De um modo geral, ele pode realizar melhor o controle do Word pelo Delphi. No entanto, ainda existem algumas funções do Word que não podem ser chamadas no Delphi (como o VBA escrito por você mesmo). ). E se a função for originalmente opcional no código VBA, os parâmetros devem ser adicionados ao chamar o Delphi, caso contrário, nem mesmo a compilação passará. Os programas Word e Delphi iniciados desta forma pertencem a duas formas respectivamente. Este método só pode ser usado como referência.
c. Use a tecnologia Com real para importar todas as bibliotecas de classes no arquivo MSWORD9.OLB no diretório de software Office para o Delphi, use a tecnologia Com para programar, use a tecnologia Com real para importar a biblioteca de classes do arquivo MsWord9.OLD e, em seguida, use a tecnologia Com. tecnologia para programar o uso. No geral, é semelhante ao uso do controle Servidores do Delphi. É um pouco mais problemático do que o controle Servidores. As vantagens e desvantagens são as mesmas do controle Servidores.
d. Use CreateOleObject para iniciar o Word e controle o Word no modo Ole.
Este método consiste em usar o método CreateOleObjects para chamar o Word, que na verdade é Ole, mas esse método pode realmente controlar totalmente o arquivo do Word e usar todas as propriedades do Word, incluindo o código de macro VBA escrito por você.
Comparado com o controle de servidores e a tecnologia COM, este método pode realmente usar várias propriedades do Word. É basicamente o mesmo que escrever seu próprio código em VBA e não há necessidade de usar o código padrão. Os programas Word e Delphi iniciados desta forma pertencem a duas formas respectivamente. A desvantagem é que não há prompt de código Delphi ao usar este método. Todo o tratamento de exceções precisa ser escrito por você mesmo e pode haver mais conhecimento exploratório ao escrever.
3. Editor de macros do Word
O Word pode realmente editar código VBA e escrever formulários e funções.
Como entrar no editor de macro do Word: Ferramentas->Macros->Editor Visual Basic para entrar na interface do editor Visual Basic. A interface do editor Visual Basic do Word é basicamente a mesma do editor Visual Basic real, então não entrarei em detalhes aqui. No código VBA, você pode adicionar formulários de usuário, módulos e módulos de classe. Os conceitos de formulários de usuário, módulos e módulos de classe são exatamente os mesmos do Visual Basic. Os comentários também são exatamente iguais aos do Visual Basic.
Você pode colocar o cursor em qualquer sub-rotina do formulário ou módulo e pressionar diretamente “F5” para executar a sub-rotina atual.
4. Visão geral das macros do Word
O Word combina totalmente a edição de documentos e VB para automatizar verdadeiramente os documentos. Programar usando Word é semelhante a usar Visual Basic. A diferença é que no Word você pode executar diretamente uma determinada sub-rotina e ver os resultados diretamente. As macros do Word só podem ser interpretadas e executadas, enquanto o Visual Basic agora pode ser gravado em programas reais. Do ponto de vista da proteção do código, o número de códigos VBA no Word deve ser reduzido tanto quanto possível, principalmente os códigos-chave.
As macros VBA podem ser divididas em quatro tipos:
1. Macro com o mesmo nome do comando
Como FileSave, FileOpen, se o código VBA contiver funções com o mesmo nome do Word, esses códigos VBA serão executados diretamente, ignorando os comandos do próprio Word.
2. Macros específicas no Word
Essas macros incluem AutoExec (iniciar o Word ou carregar modelos globais), AutoNew (cada vez que um novo documento é criado), AutoOpen (cada vez que um documento existente é aberto), AutoClose (cada vez que um documento é fechado), AutoExit (sair do Word ou descarregando modelos globais) hora).
Se o código VBA contiver funções com esses nomes, o código correspondente será executado automaticamente se as condições correspondentes forem atendidas.
3. Macro VBA para eventos correspondentes
Essas macros são macros acionadas por eventos. Por exemplo, Document_Close aciona um evento quando o documento é fechado, Document_New é acionado quando um novo documento é criado e Document_Open é acionado quando o documento é aberto.
4. Macro independente
O código VBA que você mesmo escreve, ou seja, o código VBA que não se enquadra nas situações acima, pode ser chamado por outros códigos VBA e, mais importante, pode ser chamado por outros programas.
Desta forma, podemos descartar as macros executadas automaticamente pelo Word e chamar diretamente as macros correspondentes através do Delphi para atingir o objetivo.
[b]5. Descrição detalhada das macros de comando do Word[/b]
O próprio Word contém muitas funções de comando, mas nem a ajuda online do Word nem a ajuda do MSDN fornecem qualquer introdução a esse aspecto, portanto, você só pode explorá-lo por meio de seus próprios experimentos. As funções inicialmente exploradas são as seguintes:
Comentários de explicação do nome da macro
ArquivoNovo Novo
FileNewDefault cria um novo documento em branco
ArquivoSalvarAs Salvar como
ArquivoAbrir aberto
ArquivoFecharFechar
Impressão FilePRint
Visualização de impressão FilePrintPreview
FerramentasPersonalizar Personalização na barra de ferramentas
Opções de ferramentas ToolsOptions
FerramentasRevisões Destacar revisões
ToolsReviewRevisions Aceitar ou rejeitar revisões
FerramentasRevisionMarksAccept Aceitar revisões
ToolsRevisionMarksReject Rejeitar revisão
FerramentasRevisãoMarcasAlternar revisões
FerramentasMacro macro
ToolsRecordMacroToggle Gravar nova macro
VerSegurança Segurança
ViewVBCode Visualizar ambiente do editor VB
Modelos e complementos do FileTemplates
ToolsProtectUnprotectDocument Desprotege o documento
InserirHyperlink Inserir hiperlink
Editar hiperlink Editar hiperlink
DeleteHyperlink Excluir hiperlink
EditLinks Visualize e exclua links
EditPasteAsHyperlink Colar hiperlink
Estilo FormatStyle
Marcador EditBookMark
Alguns códigos usados no OleWord
1. O programa Delphi inicia o Word
Use o método CreateOleObjects para iniciar o Word e chamar o código VBA. O processo de implementação específico é:
Primeiro use GetActiveOleObject('Word.application') para determinar se existe um programa Word na memória atual. Se existir, conecte-se diretamente. Se não houver nenhum programa Word, use CreateOleObject('Word.Application') para iniciar o Word.
2. Programa Delphi para criar um novo documento Word
Formato: WordDocuments.Add(Modelo,NovoTemplate,DocumentType,Visível)
Modelo: O nome do modelo a ser usado,
NewTemplate: O tipo de novo documento, True representa um modelo, False representa um documento
DocumentType: tipo de documento, o padrão é documento em branco
Visível: se a janela recuperada está visível
Exemplo: Doc_Handle:=Word_Ole.Documents.Add(Template:='C:/Temlate.dot',NewTemplate:=False);
3. Programa Delphi abre documento Word
Formato: WordDocuments.Open(FileName,ConfirmConversions,ReadOnly,PassWordDocument,
PasswordTemplate,Revent,WritePasswordDocument,WritePassWordTemplate,
Formato, Codificação, Visível)
FileName: Nome do documento (incluindo caminho)
Confirmconversions: se a caixa de diálogo de conversão de arquivo deve ser exibida
ReadOnly: se o documento deve ser aberto no modo somente leitura
AddToRecentFiles: se deseja adicionar arquivos à lista de arquivos usados recentemente na parte inferior do menu Arquivo
PassWordDocument: A senha necessária para abrir este documento
PasswordTemplate: a senha necessária para abrir este modelo
Reverter: se o documento já estiver lá, será necessário reabri-lo
WritePasswordDocument: Senha necessária para salvar as alterações no documento
WritePasswordTemplate: salva a senha necessária ao fazer alterações no modelo
Formato: O conversor de arquivo necessário para abrir o documento
Codificação: a página de código do documento usada
Visível: se a janela que abre o documento está visível
Exemplo:
Doc_Handle:=Word_Ole.Documents.open(FileName:=Doc_File,ReadOnly:=Falso,
AddToRecentFiles:=Falso);
4. Programa Delphi para salvar documentos do Word
Formato: WordDocuments.SaveAs(FileName, FileFormat, LockComments, Senha,
AddToRecentFiles, WritePassword, ReadOnlyRecommended,
EmbedTrueTypeFonts, SaveNativePictureFormat, SaveFormsData,
Salvar comoAOCELetter)
NomeArquivo: Nome do arquivo. O padrão é a pasta atual e o nome do arquivo.
FileFormat O formato no qual o documento é salvo.
LockComments Se True, somente comentários serão permitidos neste documento.
Senha Senha ao abrir o documento.
AddToRecentFiles Se True, adiciona o documento à lista de documentos usados recentemente no menu Arquivo.
WritePassword Salva a senha necessária para fazer alterações no documento.
ReadOnlyRecommended Se True, o Word recomendará o modo somente leitura sempre que o documento for aberto.
EmbedTrueTypeFonts Se for True, salve o documento com fontes TrueType.
SaveNativePictureFormat Se True, os gráficos importados de outras plataformas de sistema (como Macintosh) terão apenas suas versões do Windows salvas.
SaveFormsData Se True, os dados inseridos pelo usuário no formulário são salvos como um registro de dados.
SaveAsAOCELetter Se o documento contiver anexo, quando esta propriedade for True, salve o documento como uma carta AOCEL (e salve o email).
Exemplo:
Word_Ole.Documents.SaveAs(NomedoArquivo:=Doc_File,FileFormat=wdFormatDocument,
AddToRecentFiles=Falso);
5. Leia os arquivos do banco de dados para o disco rígido local e leia os arquivos do disco rígido local para o banco de dados.
Utilize o campo binário Image para salvar no banco de dados e utilize o método Stream.
Crie um fluxo de arquivos:
Word_FileStream:=TFileStream.Create(Target_Name,fmOpenWrite ou fmCreate);
Word_FileStream.Position:=0;
Campo de imagem salvo no banco de dados:
TBlobField(AdoQuery1.FieldByName(Column_Name)).SaveToStream(Word_FileStream);
Leia arquivos do banco de dados para o disco rígido local:
TBlobField(ADOQuery1.FieldByName(Column_Name)).loadfromStream(Word_FileStream);
Libere o fluxo de arquivos:
Word_FileStream.Free;
6. Definição de mensagem global
Como os programas Word e Delphi são dois softwares, é difícil se comunicar entre si, portanto, o método de mensagem global é usado. As mensagens globais devem ser registradas primeiro, e o Windows retorna o número da mensagem inativa do sistema. Quando as mensagens registradas são iguais, o sistema Windows retorna o mesmo valor, garantindo assim que este número da mensagem seja utilizado para comunicação entre dois programas.
Como definir uma mensagem:
szMessageString: pchar = 'XIDIAN_11_Stone';
FMyJoinMessage := RegisterWindowMessage(szMessageString);
Como enviar uma mensagem:
SendMessage (endereço de outra parte, mensagem, mensagem vem com variáveis curtas, mensagem vem com variáveis longas)
7. Como o programa Delphi recebe mensagens
Existem dois tipos de mensagens recebidas pelo Delphi. Uma é sobrecarregar uma mensagem específica e a outra é sobrecarregar a função WndProc e selecionar a mensagem correspondente para processamento.
O método um só pode processar uma mensagem por vez, enquanto o método dois pode processar várias mensagens ao mesmo tempo.
Para o método dois, a declaração é a seguinte:
procedimento WndProc(var Mensagem: Tmessage);substituir
Deve-se observar que ao utilizá-lo, você precisa herdar a função WndProc(Message) após processar sua própria mensagem, caso contrário o sistema irá travar!
8. Geração dinâmica de caixa de diálogo Combo e evento Change no Word
Crie o módulo de classe Combohander e defina eventos internamente
Público WithEvents ComboBoxEvent como Office.CommandBarComboBox
Defina o módulo que gera eventos para o controle Combo
Dim ctlComboBoxHandler como novo ComboBoxHandler
Caixa de diálogo Gerar combinação
Definir Cbo_ChooseDoc = CommandBars("Menu Adicionado").Controls.Add(Type:=msoControlComboBox, Temporary:=True)
Defina o identificador de arquivo para gerar o evento Combo_Change
Definir ctlComboBoxHandler.ComboBoxEvent = Cbo_ChooseDoc
Após a geração do evento, selecione o evento Change de ComboBoxEvent no módulo de classe Combohander para escrever o código do evento
Sub ComboBoxEvent_Change (ByVal Ctrl como Office.CommandBarComboBox)
9. Alguns eventos do Word
Os eventos do Word tratados no código VBA são: Document_Close
O que precisa ser processado no evento Application são: DocumentBeforeClose, DocumentChange.
Document_Close: evento gera um evento quando o documento é fechado
DocumentBeforeClose: antes de o documento ser fechado, o Word determina se o documento foi salvo, fornece os prompts correspondentes e executa o processamento correspondente.
DocumentChange: Os eventos de troca de documentos são gerados quando o documento é alternado entre o documento modificado por você e o documento modificado por outros.