Editar planilhas protegidas e com células mescladas via C# exige alguns cuidados, especialmente para não corromper o arquivo ou perder a formatação original. A biblioteca mais recomendada para isso hoje é a ClosedXML (baseada no OpenXML), por ser intuitiva e lidar bem com estilos.
Aqui está o roteiro técnico para resolver seu problema:
1. Desbloqueando a Planilha
Células protegidas no Excel não podem ser editadas programaticamente a menos que você forneça a senha (se houver) ou desproteja a planilha temporariamente durante a execução do código.
2. Referenciando Células Mescladas
Em células mescladas, o Excel sempre considera a célula superior esquerda como a detentora do valor. Se você mesclou A1 e B1, você deve atribuir o valor à célula A1.
Exemplo de Código (C#)
Usando o ClosedXML (Instale via NuGet: Install-Package ClosedXML):
using ClosedXML.Excel;
public void EditarCelulaMesclada(string caminhoArquivo, string senha)
{
using (var workbook = new XLWorkbook(caminhoArquivo))
{
var worksheet = workbook.Worksheet(1); // Acessa a primeira aba
// 1. Desproteger (se necessário)
// Se não houver senha, use worksheet.Unprotect();
worksheet.Unprotect(senha);
// 2. Inserir o valor na célula mestre da mesclagem (A1)
// Mesmo que no Excel apareça como AB1, o endereço real é a primeira coluna
var celula = worksheet.Cell("A1");
celula.Value = "Novo Valor";
// 3. Re-proteger para manter a segurança original
worksheet.Protect(senha);
// 4. Salvar as alterações
workbook.Save();
}
}
Pontos de Atenção
Identificação da Célula: Se você tentar acessar
worksheet.Cell("B1")em uma mesclagem de A1:B1, o valor pode não aparecer visualmente ou o Excel pode ignorar a instrução dependendo da biblioteca. Foque sempre na "célula de origem".Preservação de Estilos: Ao usar
cell.Value = ..., o ClosedXML mantém a formatação de bordas, cores e fontes da célula mesclada. Evite usar métodos que criam uma nova célula do zero.Bibliotecas Alternativas: * EPPlus: Excelente, mas exige licença comercial para uso em empresas.
NPOI: Boa para arquivos
.xlsantigos, mas a sintaxe é mais complexa.
Por que usar o endereço "A1"?
Como você mencionou "AB1", se você se refere à Coluna AB na Linha 1 (e ela está mesclada com a AC1, por exemplo), o código seria Cell("AB1"). Se o "AB" foi uma forma de dizer "coluna A e B", então o código deve ser Cell("A1").
Gostaria que eu demonstrasse como fazer isso usando uma biblioteca diferente, como o EPPlus, ou que eu explique como identificar se a célula já está mesclada via código?
Comentários