Usuário com melhor resposta
Tabela Dinâmica Excel C#

Pergunta
-
Galera boa tarde,
Eu tenho um Arquivo Excel, dentro dele eu tenho a plan1, e a plan2, minha plan1 tem uma tabela dinamica referente a plan2.
Eu tenho um código que faz inserção nessa plan2, porem quando ele insere os valores na plan2 a minha plan1 perde a referencia da plan2, isso seria possivel fazer? sem perder a referência da plan 2
Obrigado!
Estou fazendo com seguinte código
System.Data.OleDb.OleDbConnection MyConnection;
System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
string sql = null;
MyConnection = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\Users\PFC000802\Desktop\Teste.xlsx'; Extended Properties='Excel 12.0 XML;HDR=YES;'");foreach (var item in teste)
{
MyConnection.Open();
myCommand.Connection = MyConnection;
sql = "Insert into [BD$] (NOME_BENEF, DESC_UNIDADE, DT_MARCACAO, HORA_MARCADA, NOME_MEDICO) values('"+item.nome_benef+"','"+item.desc_unidade+"','"+item.dt_marcacao+"','" + item.hora_marcada + "','" + item.nome_medico + "')";
myCommand.CommandText = sql;
myCommand.ExecuteNonQuery();
//MyConnection.Dispose();
MyConnection.Close();
}
Respostas
-
Felipe, eu utilizei o seguinte código para referenciar outra planilha, e funcionou normal:
SLDocument doc = new SLDocument(); doc.RenameWorksheet(SLDocument.DefaultFirstSheetName, "Teste1"); doc.SetCellValue("A1", "Uchiha Itachi"); doc.AddWorksheet("TESTE2"); doc.SetCellValue("A1", "=Teste1!A1"); doc.SaveAs("teste.xlsx");
Ao infinito e além!
- Marcado como Resposta Felipo Gonçalves sexta-feira, 10 de maio de 2013 16:33
Todas as Respostas
-
Felipe,
Para atender essa sua solicitação você tem que trabalhar com o conceito.
WorkBook = A planilha
WorkSheet = As abas da planinha ( plan1 e plan2)
Sendo que o objeto WorkSheet deve ser composto por Cell que serão as células da planilha.Estude por esses objetos e tente implementar, depois se não consegui coloque aqui até o ponto que conseguiu para que possamos te ajudar.
Abraços,
Leandro Rodrigues
Caso a resposta tenha ajudado, não esqueça de marcar como resposta válida
- Marcado como Resposta Felipe Torralvo quarta-feira, 8 de maio de 2013 00:22
- Não Marcado como Resposta Felipe Torralvo quarta-feira, 8 de maio de 2013 00:23
- Sugerido como Resposta Seilor Bonancio JuniorModerator quinta-feira, 9 de maio de 2013 12:19
-
-
Felipe, uma forma mais fácil de fazer isso, seria utilizar um biblioteca que manipula o excel, sem a necessidade de conexão oledb. A spreasheet light faz isso para você, desde que você esteja utilizando excel no formato .xlsx (2007 para frente, pois seu formato é baseado em xml)
Para saber mais, acesse http://spreadsheetlight.com/sample-code/
Exemplo de como modificar uma planilha existente usando esta biblioteca http://spreadsheetlight.com/downloads/samplecode/ModifyExistingSpreadsheet.cs
Ao infinito e além!
-
Fabio boa tarde,
Fiz uma implementação utilizando essa biblioteca, consegui inserir os dados tudo certinho onde eu queria, porem a minha plan1 que é dinamica, que busca as informações nessa plan, que faço a inserção dos dados, não consegue buscar esses novos dados inseridos.
Você conhece alguma madeira de inserir essa referência que ela perde, via programação?
Obrigado!
-
No site da biblioteca, na guia de tutoriais, mostra como você fazer uma fórmula na célula... Se você editar a planilha, salvar, depois ir na sua planilha dinâmica e digitar a fórmula que pega informação da outra planilha (algo do tipo ='Plan1'!A5)... resolve seu problema?
Ao infinito e além!
-
Fabio, bom dia!
Você fala do editar e salvar de maneira manual? O arquivo excel será baixado por cliente, ai o cliente só atualizaria, estou tentando encontrar onde minha pla dinamica pega a referência da planBase(algo do tipo =Plan1!$C$4:$E$11), para tentar inserir via programação essa referência.
Obrigado!
-
Felipe, eu utilizei o seguinte código para referenciar outra planilha, e funcionou normal:
SLDocument doc = new SLDocument(); doc.RenameWorksheet(SLDocument.DefaultFirstSheetName, "Teste1"); doc.SetCellValue("A1", "Uchiha Itachi"); doc.AddWorksheet("TESTE2"); doc.SetCellValue("A1", "=Teste1!A1"); doc.SaveAs("teste.xlsx");
Ao infinito e além!
- Marcado como Resposta Felipo Gonçalves sexta-feira, 10 de maio de 2013 16:33
-
Fabio, boa tarde!
Eu fiz um teste desta maneira, más no caso que tenho aqui não vai funcionar, no seu exemplo estou recebendo a referência em uma célula.
No meu caso eu teria que receber essa referência na tabela, pois tenho alguns filtro nessa tabela, nem sei se é possivel fazer isso, mais estou pesquisando, estou vendo algumas coisas com macro.
Obrigado!
-