/ / Carregar grandes quantidades de dados do objeto .NET para o Excel - .net, excel, vba

Carregando grandes quantidades de dados do objeto .NET no Excel - .net, excel, vba

Estou trabalhando em um aplicativo de banco de dados que usa o Excel como interface. Essencialmente, é uma macro do Excel que se conecta a um banco de dados por meio de uma biblioteca .NET.

O principal problema é que os clientes precisam sercapaz de gerenciar grandes quantidades de dados (5000-20000 linhas e cerca de 160 colunas). Consegui minimizar os atrasos no acesso ao banco de dados e carregando todo o bloco de dados como strings diretamente na propriedade .Value do intervalo da planilha (formatada como string [,]). Foi rápido, fácil e eficiente.

Mas agora o cliente precisa de suporte para formatos do Excel. Como, em, eu preciso que o Excel reconheça datas como tais, números como tais, e assim por diante. Isso, embora suporte tipos de dados não uniformes: uma coluna de data poderia conter um formato de data, mas também pode incluir texto ou outro.

Eu tentei várias abordagens:- Continue carregando as strings como tal, pré-formatando a coluna de acordo com seu tipo de dados esperado (ws.range (range.EntireColumn.Address) .NumberFormat = "0", por exemplo). Não funcionou. -Carregue todo o trecho, como de costume, e force o Excel a recarregar as colunas com tipos de dados não textuais, reatribuindo toda a linha:

With ws.range(ws.Cells(4, 11), ws.Cells(ws.UsedRange.rows.Count, 11))
.NumberFormat = "dd/mm/yyyy"
.Value = .Value
End With

Mas este começa a ficar bem lento quando preciso reformatar 30 colunas em um documento com aproximadamente 7.000 linhas.

-Finalmente, tentei modificar a função, para que ela crie um objeto [,] array, com os elementos em seus tipos de dados apropriados (datetime, int e assim por diante). Novamente, o Excel é terrivelmente lento para desempacotar objetos genéricos.

Meu único palpite é que eu poderia carregar os pedaços por tipo de dados, mas isso bagunça terrivelmente com meus métodos atuais.

Existe alguma alternativa para aumentar a velocidade ou reduzir as transformações?

Desde já, obrigado.

EDITAR:

Esclarecer:O excel atua como um cliente pesado que permite que vários usuários (cada um com seu próprio excel) leiam e atualizem um banco de dados remoto. O maior problema era realmente lidar com bloqueios de tabela para gravações simultâneas e tal. O problema agora é que a quantidade de dados está ficando tão grande que preciso fazer algo para acelerar os tempos de importação e exportação. Já tornei os tempos de exportação suportáveis ​​(na maioria das vezes os usuários não carregam tantos dados no banco de dados), mas os tempos de importação são lentos e o principal gargalo é escrever na planilha.

Além disso, os usuários já estão acostumados auma ferramenta semelhante que eles usavam de outra empresa antes de eu entrar, então eles são muito inflexíveis quanto a manter o mesmo formato. Esse aplicativo envia uma solicitação a um serviço da web, a partir do qual baixa um CSV com as informações. Em seguida, carrega esse CSV como uma fonte de dados no Excel. Essa abordagem não é válida para mim porque não tenho acesso administrativo à máquina onde está o DB, nem qualquer outra que possa usar como ponte para o WS. Só tenho privilégios administrativos para o próprio banco de dados. Acho que sim. poderia construir o CSV a partir dos dados consultados na dll e, em seguida, usar a mesma abordagem que eles.

Respostas:

0 para resposta № 1

Se você quiser criar arquivos de dados formatados do Excel em seu código .NET, esta é uma lista de bibliotecas populares que podem fazer isso:

e artigo Criar Excel (.XLS e .XLSX) arquivo de c # tem uma discussão mais longa sobre várias opções

Se você quiser atualizar banco de dados remoto do Excel VBA código e artigo Código VBA para loop e atualização da coluna de banco de dados de acesso MS a partir do Excel e esta consulta do Google: "site: stackoverflow.com excel vba update database"

Se você quiser abra de forma invisível um arquivo de dados do Excel criado por seu back-end .NET para posterior processamento / fusão, em seguida, artigo Abra o arquivo Excel para leitura com VBA sem display tem algumas dicas de como você pode fazer isso

Se você quiser obter melhores respostas de mais pessoas em seguida, tente estreitar claramente o problema em uma pergunta clara (https://stackoverflow.com/help/how-to-ask) e também fornecer algum código na forma de Exemplo mínimo, completo e verificável