Atualizar valores de células do Excel programaticamente é uma das tarefas mais comuns na automação do Excel. Seja gerando relatórios, atualizando arquivos de dados ou processando informações em massa, conseguir atualizar células do Excel em C# com eficiência é crucial para seus aplicativos.

Por que atualizar células do Excel programaticamente?
- 📊 Gerar relatórios dinâmicos
- 🔄 Atualizações de dados em massa
- 📈 Processamento automatizado de dados
- 💼 Automação do fluxo de trabalho empresarial
- 🕒 Atualizações de dados agendadas
Introdução ao Openize.OpenXML SDK
using Openize.Cells;
using System;
Atualizações básicas de células
Atualizar células individuais
using Openize.Cells;
class CellUpdater
{
public static void UpdateSingleCells()
{
using (var workbook = new Workbook("data.xlsx"))
{
var worksheet = workbook.Worksheets[0];
// Update different data types
worksheet.Cells["A1"].PutValue("Updated Text");
worksheet.Cells["B1"].PutValue(12345);
worksheet.Cells["C1"].PutValue(99.99);
worksheet.Cells["D1"].PutValue(DateTime.Now);
worksheet.Cells["E1"].PutValue(true);
// Save changes
workbook.Save();
Console.WriteLine("Cells updated successfully!");
}
}
}
Atualizar várias células em um loop
public static void UpdateMultipleCells()
{
using (var workbook = new Workbook("report.xlsx"))
{
var worksheet = workbook.Worksheets[0];
// Update headers
string[] headers = {"Product", "Price", "Quantity", "Total"};
for (int i = 0; i < headers.Length; i++)
{
worksheet.Cells[$"{GetColumnLetter(i + 1)}1"].PutValue(headers[i]);
}
// Update data rows
string[,] data = {
{"Laptop", "999.99", "5", "4999.95"},
{"Mouse", "25.50", "10", "255.00"},
{"Keyboard", "75.00", "3", "225.00"}
};
for (int row = 0; row < data.GetLength(0); row++)
{
for (int col = 0; col < data.GetLength(1); col++)
{
string cellRef = GetCellReference(row + 2, col + 1);
worksheet.Cells[cellRef].PutValue(data[row, col]);
}
}
workbook.Save();
Console.WriteLine("Multiple cells updated!");
}
}
static string GetCellReference(int row, int col)
{
return $"{GetColumnLetter(col)}{row}";
}
static string GetColumnLetter(int columnNumber)
{
string columnLetter = string.Empty;
while (columnNumber > 0)
{
columnNumber--;
columnLetter = (char)('A' + columnNumber % 26) + columnLetter;
columnNumber /= 26;
}
return columnLetter;
}
Operações de atualização avançadas
Atualização com base nas condições
public static void ConditionalUpdate()
{
using (var workbook = new Workbook("sales.xlsx"))
{
var worksheet = workbook.Worksheets[0];
// Read and update based on conditions
for (int row = 2; row <= worksheet.GetRowCount(); row++)
{
string salesValue = worksheet.Cells[$"C{row}"].GetValue();
if (double.TryParse(salesValue, out double sales))
{
// Update status based on sales amount
if (sales > 10000)
{
worksheet.Cells[$"D{row}"].PutValue("High Performer");
}
else if (sales > 5000)
{
worksheet.Cells[$"D{row}"].PutValue("Good");
}
else
{
worksheet.Cells[$"D{row}"].PutValue("Needs Improvement");
}
}
}
workbook.Save();
Console.WriteLine("Conditional updates completed!");
}
}
Atualização em massa com operações de alcance
public static void BulkRangeUpdate()
{
using (var workbook = new Workbook("template.xlsx"))
{
var worksheet = workbook.Worksheets[0];
// Update a range of cells with the same value
var range = worksheet.GetRange(1, 1, 1, 5); // A1:E1
range.SetValue("HEADER");
// Update a column with sequential values
for (int row = 2; row <= 10; row++)
{
worksheet.Cells[$"A{row}"].PutValue($"Item {row - 1}");
worksheet.Cells[$"B{row}"].PutValue(row * 100);
}
workbook.Save();
Console.WriteLine("Bulk update completed!");
}
}
Exemplo do mundo real: atualização de dados de funcionários
using Openize.Cells;
using System.Collections.Generic;
public class Employee
{
public string Name { get; set; }
public string Department { get; set; }
public double Salary { get; set; }
public DateTime HireDate { get; set; }
}
public class EmployeeDataUpdater
{
public static void UpdateEmployeeData()
{
var employees = new List<Employee>
{
new Employee { Name = "John Doe", Department = "IT", Salary = 75000, HireDate = new DateTime(2020, 1, 15) },
new Employee { Name = "Jane Smith", Department = "HR", Salary = 65000, HireDate = new DateTime(2019, 3, 20) },
new Employee { Name = "Mike Johnson", Department = "Finance", Salary = 80000, HireDate = new DateTime(2021, 6, 10) }
};
using (var workbook = new Workbook())
{
var worksheet = workbook.Worksheets[0];
worksheet.Name = "Employee Data";
// Set headers
worksheet.Cells["A1"].PutValue("Name");
worksheet.Cells["B1"].PutValue("Department");
worksheet.Cells["C1"].PutValue("Salary");
worksheet.Cells["D1"].PutValue("Hire Date");
worksheet.Cells["E1"].PutValue("Years of Service");
// Update employee data
for (int i = 0; i < employees.Count; i++)
{
int row = i + 2;
var emp = employees[i];
worksheet.Cells[$"A{row}"].PutValue(emp.Name);
worksheet.Cells[$"B{row}"].PutValue(emp.Department);
worksheet.Cells[$"C{row}"].PutValue(emp.Salary);
worksheet.Cells[$"D{row}"].PutValue(emp.HireDate);
// Calculate years of service
int yearsOfService = DateTime.Now.Year - emp.HireDate.Year;
worksheet.Cells[$"E{row}"].PutValue(yearsOfService);
}
workbook.Save("UpdatedEmployeeData.xlsx");
Console.WriteLine("Employee data updated successfully!");
}
}
}
Melhores práticas de tratamento de erros
public static void SafeUpdateCells(string filePath)
{
try
{
using (var workbook = new Workbook(filePath))
{
var worksheet = workbook.Worksheets[0];
// Validate before updating
if (worksheet.GetRowCount() < 1 || worksheet.GetColumnCount() < 1)
{
Console.WriteLine("Worksheet is empty!");
return;
}
// Safe update with validation
string existingValue = worksheet.Cells["A1"].GetValue();
if (!string.IsNullOrEmpty(existingValue))
{
worksheet.Cells["A1"].PutValue($"Updated: {existingValue}");
}
else
{
worksheet.Cells["A1"].PutValue("New Value");
}
workbook.Save();
Console.WriteLine("Update completed successfully!");
}
}
catch (FileNotFoundException)
{
Console.WriteLine("Excel file not found!");
}
catch (UnauthorizedAccessException)
{
Console.WriteLine("File is locked or you don't have permission!");
}
catch (Exception ex)
{
Console.WriteLine($"Error updating cells: {ex.Message}");
}
}
Dicas de desempenho
- Atualizações em lote: atualize várias células antes de salvar
- Use intervalos: para operações em massa, use métodos de intervalo
- Minimize E/S de arquivo: abra, atualize, salve, feche em uma única operação
- Conscientização sobre o tipo de dados: use sobrecargas PutValue apropriadas
Conclusão
Atualizar valores de células do Excel programaticamente com o Openize.OpenXML SDK é simples e eficiente. A biblioteca oferece:
- ✅ Suporte a vários tipos de dados
- ✅ Operações de intervalo para atualizações em massa
- ✅ Alto desempenho
- ✅ Operações thread-safe
- ✅ Não requer instalação do Excel Comece a automatizar suas atualizações do Excel hoje mesmo!