Usuário com melhor resposta
Inserir linha no Excel através do C#

Pergunta
-
Olá a todos,
estou iniciando no C# e estou criando um programinha para tratar dados de medições meteorológicas. Essa medição é feita de 5 em 5 minutos. Assim sendo, começa-se a medir 00:05 e a próxima medição será 00:10. Só que, as vezes, ele não faz uma medição: de 00:05 vai para 00:15.
Esse programa que eu estou fazendo é para inserir linhas onde eu encontrar essa falta. Eu já consegui fazer o código para localizar os "furos de dados" e retornar o número da linha que necessita ser inserida. Agora, falta conseguir inserir a linha.
Procurei em diversos foruns porém não encontrei nada que funcionasse. Segue a parte do programa na qual preciso inserir a linha:
Excel._Worksheet oSheet; /*define oSheet como sheet */ var teste = new Excel.Application(); /* variavel teste como uma aplicação de Excel */ teste.Workbooks.Open(@"C:\Users\Rafael\Documents\FOTOVOLTAICA\Pasta2.xlsm", Type.Missing, false); /*Abrir uma planilha de excel atraves da aplicação teste */ ((Excel.Worksheet)teste.Application.ActiveWorkbook.Sheets[1]).Select(Type.Missing); oSheet = (Excel._Worksheet)teste.ActiveSheet; /*Define oSheet uma sheet do arquivo ativo */ teste.Visible = true; for (int i = 1; i < dataGridView1.RowCount - 1; i++) { if (dataGridView1.Rows[i].Cells[0].Value.ToString() == "" || dataGridView1.Rows[i].Cells[1].Value.ToString() == "") { dataGridView1.Rows.RemoveAt(i); i--; } } string[] erros = new string[8]; int t = dataGridView1.Rows.Count - 1; for (int a = 1; a <= t; a++) { erros[a] = dataGridView1.Rows[a].Cells[3].Value.ToString(); } for (int b = 1; b <= 8; b++) { Excel.Range r = teste.ActiveSheet.get_Range("A" + erros[b].ToString(), "A" + erros[b].ToString()).EntireRow; r.Insert(Excel.XlInsertShiftDirection.xlShiftDown); } }
O Excel.Range r = ... Não está funcionando para este fim. Alguém saberia alguma alternativa?
Muito obrigado,
Rafael.
Respostas
-
Da uma olhada nisso.
for (int i = 2; i < dtb.Rows.Count + 2; i++) { DataRow row = dtb.Rows[i - 2]; // excel funciona no 1 e dtb no 0 então subtrai um para igualar os 2 for (int i2 = 1; i2 < dtb.Columns.Count + 1; i2++) { try { Microsoft.Office.Interop.Excel.Range rg = (ws.Cells[i, i2] as Microsoft.Office.Interop.Excel.Range); // primeiro linha segundo coluna, no dtb começa 0 execel começa 1 rg.Value2 = row[i2 - 1].ToString(); } catch { } } }
- Sugerido como Resposta Giovani Cr segunda-feira, 7 de abril de 2014 18:59
- Marcado como Resposta Giovani Cr quarta-feira, 9 de abril de 2014 19:39
-
Olá Dietrich_Prg,
muito obrigado pela resposta. Consegui resolver meu problema com o seguinte código:
const int xlShiftDown = -4121; Excel.Range oRange = oSheet.get_Range("A"+linhas[b]); Excel.Range oRow = oRange.EntireRow; oRow.Insert(xlShiftDown);
Obrigado novamente.
Rafael.
- Marcado como Resposta Giovani Cr quarta-feira, 9 de abril de 2014 19:39
Todas as Respostas
-
Da uma olhada nisso.
for (int i = 2; i < dtb.Rows.Count + 2; i++) { DataRow row = dtb.Rows[i - 2]; // excel funciona no 1 e dtb no 0 então subtrai um para igualar os 2 for (int i2 = 1; i2 < dtb.Columns.Count + 1; i2++) { try { Microsoft.Office.Interop.Excel.Range rg = (ws.Cells[i, i2] as Microsoft.Office.Interop.Excel.Range); // primeiro linha segundo coluna, no dtb começa 0 execel começa 1 rg.Value2 = row[i2 - 1].ToString(); } catch { } } }
- Sugerido como Resposta Giovani Cr segunda-feira, 7 de abril de 2014 18:59
- Marcado como Resposta Giovani Cr quarta-feira, 9 de abril de 2014 19:39
-
Olá Dietrich_Prg,
muito obrigado pela resposta. Consegui resolver meu problema com o seguinte código:
const int xlShiftDown = -4121; Excel.Range oRange = oSheet.get_Range("A"+linhas[b]); Excel.Range oRow = oRange.EntireRow; oRow.Insert(xlShiftDown);
Obrigado novamente.
Rafael.
- Marcado como Resposta Giovani Cr quarta-feira, 9 de abril de 2014 19:39
-