Usuário com melhor resposta
Update primeiro campo disponível arquivo .xlsx

Pergunta
-
Bom dia a todos,
Recebo de um cliente uma planilha com campos pré preenchidos e tenho alguns outros campos que precisam ser preenchidos
Col A Col B Col C
Linha 1 aa cc Esses campos são repetidos em todas as linhas!
Linha 1 aa cc
Linha 1 aa cc
Assim por diante!
Como posso estar procedendo para realizar um Update nos campos em branco?
Tentei realizar um insert de um único campo em branco, mais inseriu na ultima linha disponíveis!
Imaginei realizar o update pelo índice da linha mais não sei como proceder.
Esse update teria que pegar a primeira linha livre com o campo da Coluna B em branco e preencher, assim iria preencher uma linha por vez!
Col A Col B Col C
Linha 1 aa teste cc
Linha 1 aa cc
Linha 1 aa cc
Desde já muito obrigado!
- Movido William John Adam Trindade segunda-feira, 6 de fevereiro de 2017 15:34 foi movido para o forum correto
Respostas
-
Depois de muita pesquisa consegui resolver meu problema!
Segue a solução!
protected void Button1_Click(object sender, EventArgs e) { string Caminho = @"C:\testeXLSX\BM TESTE.xlsx"; try { Planilha_load(Caminho); } catch (Exception ex) { //MessageBox.Show(ex.message); } } private void Planilha_load(string caminho) { Microsoft.Office.Interop.Excel.Application _excelApp = new Microsoft.Office.Interop.Excel.Application(); Workbook workBook = _excelApp.Workbooks.Open(caminho, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); ExcelScanIntenal(workBook); workBook.Save(); workBook.Close(false, caminho, null); _excelApp.Quit(); } private void ExcelScanIntenal(Workbook workBookIn) { foreach (Worksheet sheet in workBookIn.Sheets) { if (sheet.Name == "TESTE") { Range excelRange = sheet.UsedRange; object[,] valueArray = (object[,])excelRange.get_Value( XlRangeValueDataType.xlRangeValueDefault); ProcessObjects(valueArray, excelRange); } } } private void ProcessObjects(object[,] valueArray, Range excelRange) { //ai vc faz o que quiser com a matriz excelRange.Cells.set_Item(7, 2, "222222"); excelRange.Cells.set_Item(7, 3, "ABC"); excelRange.Cells.set_Item(7, 4, "DFG"); excelRange.Cells.set_Item(7, 5, "DD"); excelRange.Cells.set_Item(7, 6, "AA"); excelRange.Cells.set_Item(7, 7, "1"); excelRange.Cells.set_Item(7, 9, "1/1/2017"); excelRange.Cells.set_Item(7, 10, "15/1/2017"); excelRange.Cells.set_Item(7, 20, "TESTE UPDATE VARIOS CAMPOS"); }
Desde já Muito Obrigado!
- Marcado como Resposta Marcio Camargo terça-feira, 7 de fevereiro de 2017 13:50
Todas as Respostas
-
Olá Marcio, segue um exemplo:
var excelApp = new Application(); excelApp.Workbooks.Open("C:\\myFile.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); var ws = excelApp.Worksheets; var worksheet = (Worksheet)ws.get_Item("Sheet1"); Range range = worksheet.UsedRange; object[,] values = (object[,])range.Value2; for (int row = 1; row <= values.GetUpperBound(0); row++) { string phone = Convert.ToString(values[row, 2]); if (!phone.StartsWith("0")) { phone = "0" + phone; } range.Cells.set_Item(row, 2, phone); } excelApp.Save("C:\\Leads.xls"); excelApp.Quit();
Fonte: http://stackoverflow.com/questions/15899046/replace-or-update-entries-in-excel-file
- Editado John Owl segunda-feira, 6 de fevereiro de 2017 15:37 Remoção de código desnecessário.
- Marcado como Resposta Marcio Camargo segunda-feira, 6 de fevereiro de 2017 15:52
- Não Marcado como Resposta Marcio Camargo segunda-feira, 6 de fevereiro de 2017 15:52
-
Boa tarde Jonh
Obrigado pelo retorno, tentei replicar seu exemplo mais esta dando alguns erros que não estou conseguindo solucionar!
Meu projeto é baseado em WebForm e tem o seguinte cenário.
O usuário do sistema vai colocar a planilha em uma pasta vai preencher alguns dados na pagina de pesquisa, nessa pesquisa vai retornar com as informações necessárias para o preenchimento da planilha.
Acho que minha Thread foi enviada para local errado pelo William John Adam Trindade! RS
Mais você poderia me ajudar!
-
Depois de muita pesquisa consegui resolver meu problema!
Segue a solução!
protected void Button1_Click(object sender, EventArgs e) { string Caminho = @"C:\testeXLSX\BM TESTE.xlsx"; try { Planilha_load(Caminho); } catch (Exception ex) { //MessageBox.Show(ex.message); } } private void Planilha_load(string caminho) { Microsoft.Office.Interop.Excel.Application _excelApp = new Microsoft.Office.Interop.Excel.Application(); Workbook workBook = _excelApp.Workbooks.Open(caminho, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); ExcelScanIntenal(workBook); workBook.Save(); workBook.Close(false, caminho, null); _excelApp.Quit(); } private void ExcelScanIntenal(Workbook workBookIn) { foreach (Worksheet sheet in workBookIn.Sheets) { if (sheet.Name == "TESTE") { Range excelRange = sheet.UsedRange; object[,] valueArray = (object[,])excelRange.get_Value( XlRangeValueDataType.xlRangeValueDefault); ProcessObjects(valueArray, excelRange); } } } private void ProcessObjects(object[,] valueArray, Range excelRange) { //ai vc faz o que quiser com a matriz excelRange.Cells.set_Item(7, 2, "222222"); excelRange.Cells.set_Item(7, 3, "ABC"); excelRange.Cells.set_Item(7, 4, "DFG"); excelRange.Cells.set_Item(7, 5, "DD"); excelRange.Cells.set_Item(7, 6, "AA"); excelRange.Cells.set_Item(7, 7, "1"); excelRange.Cells.set_Item(7, 9, "1/1/2017"); excelRange.Cells.set_Item(7, 10, "15/1/2017"); excelRange.Cells.set_Item(7, 20, "TESTE UPDATE VARIOS CAMPOS"); }
Desde já Muito Obrigado!
- Marcado como Resposta Marcio Camargo terça-feira, 7 de fevereiro de 2017 13:50