
Tenho um arquivo Excel com campos diferentes em cada coluna:
Campo 1__ | Campo 2__ | etc.
F1 Item 1 | F2 Item 1 | etc.
F1 Item 2 | F2 Item 2 | etc.
cada campo contém um número diferente de itens.
Quero criar um documento do Word 2010 que liste todos os itens de cada campo em um documento e não dividido em vários documentos para cada registro. Portanto, o documento final do Word se parece com:
Campo 1
__ F1 Item 1
__ F1 Item 2
Campo 2
__ F2 Item 1
__ F2 Item 2
__ F2 Item 3
Os rótulos "Campo 1" e "Campo 2" não precisariam de um campo de mala direta, mas todos os itens no campo precisariam ser mesclados por correspondência para serem exibidos em um documento. Isso é possível, alguma ideia ou recurso sobre como conseguir isso?
Responder1
Eu usaria uma ferramenta de consulta e relatórios como o SQL Server Reporting Services para isso. Você pode conectá-lo a um arquivo Excel via ODBC, por exemplo
http://weblogs.sqlteam.com/joew/archive/2008/08/22/60695.aspx
O design do relatório teria duas tabelas - uma para o Campo 1 e a próxima para o Campo 2. Você precisaria escrever duas instruções SQL SELECT (bastante simples) para obter os dados como dois conjuntos de dados.
O Reporting Services faz um bom trabalho de renderização para o Word. O layout pode ser muito mais complexo do que uma mala direta do Word, por exemplo, múltiplas regiões de dados, sub-relatórios aninhados, gráficos complexos, etc.
Você pode executar o Reporting Services como um aplicativo de desktop, incorporá-lo em um aplicativo do Windows ou Word ou implantá-lo em um site do SharePoint ou em um portal simples do Reporting Services.
Responder2
Vocêpoderiaser capaz de usar o campo DATABASE do Word para isso. A caixa de diálogo para inserir um não está na faixa de opções, então você tem que encontrá-lo nas Opções do Word e colocá-lo no QAT ou algo assim. Mas ele sofre de um ou dois problemas, então provavelmente é melhor inserir o campo manualmente - use ctrl-F9 para inserir um par de códigos especiais de colchetes de campo para que você tenha
{ }
(você não pode simplesmente digitar essas chaves no teclado).
Então, tudo entre {} é texto normal. Suponhamos que seu documento Excel se chame c:\xl\mywb.xlsx, os dados estejam em uma planilha chamada Planilha1$ e você tenha 3 campos chamados Campo1, Campo2 e Campo3. Então seu primeiro campo DATABASE pode ficar assim:
{ DATABASE \d "C:\\xl\\mywb.xlsx" \s "SELECT cf1.[field1] FROM [Sheet1$] cf1 WHERE ((cf1.[field1] IS NOT NULL ))" \h }
Observe as barras invertidas duplicadas no nome do caminho. Depois de inserir isso, selecione o campo, pressione F9 para executá-lo e use Alt-F9 para ver os resultados. Se eles estiverem próximos do que você precisa para sua primeira coluna, isso pode funcionar bem para você; se não estiverem, provavelmente é um bom momento para desistir dessa abordagem. Se um erro for relatado, provavelmente é devido a um erro de digitação.
Depois de ter uma coluna funcionando, copie/cole o campo do banco de dados e altere os nomes para que você tenha
{ DATABASE \d "C:\\xl\\mywb.xlsx" \s "SELECT cf1.[field1] FROM [Sheet1$] cf1 WHERE ((cf1.[field1] IS NOT NULL ))" \h }
{ DATABASE \d "C:\\xl\\mywb.xlsx" \s "SELECT cf2.[field2] FROM [Sheet1$] cf2 WHERE ((cf2.[field2] IS NOT NULL ))" \h }
em seguida, selecione F9, Alt-F9 novamente. Se tudo estiver bem, repita para os campos restantes.
Algumas notas:
WHERE ((cf2.[field2] IS NOT NULL )) existe para lidar com o fato de que suas colunas possuem diferentes números de células. Mas você pode precisar de um pouco mais do que isso, e esta técnica eliminarátodoscélulas em branco, não apenas células vazias na parte inferior da coluna.
\h apenas adiciona um cabeçalho de coluna.
os "cf1", "cf2" são SQL "nomes de alias da TABELA". Você pode inventá-los conforme necessário. Eles não deveriam ser necessários, mas estão lá porque sem eles o Word tende a ficar um pouco confuso, como você pode descobrir se tentar inserir esses campos usando a caixa de diálogo do campo DATABASE (que não insere esses nomes alternativos).