Visual C++ .NET - Grafico bloqueado en excel

 
Vista:

Grafico bloqueado en excel

Publicado por FANY (1 intervención) el 07/03/2008 10:00:46
Hola a todos, tengo un problema a la hora de generar un fichero excel a partir de una plantilla, en el tengo un grafico en una hoja, y otra hoja mas con los datos del grafico. Cuando abro el archivo una vez generado no me deja hacer nada en el grafico, ni siquiera selecionarlo, ¿que es lo que estoy haciendo mal?
Muchas gracias, os dejo el codigo a continuación:

Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook ObjWorkBook;
Microsoft.Office.Interop.Excel.Worksheet ws;
String path = System.Windows.Forms.Application.StartupPath + "\Plantillas\ParetosAverias.xlT";
int row = 2, col = 1, i = 0;

if (xlApp == null)
{
MessageBox.Show("EXCEL no ha podido inicializarse. Comprueba que la instalación de Offices y las referencias del proyecto son correctas.");
return;
}
ObjWorkBook = xlApp.Workbooks.Open(path, 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);
xlApp.Visible = false;
ws = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBook.Sheets[2];

while (rst.EOF == false)
{
ws.Cells[row, col] = rst.Fields[1].Value;
ws.Cells[row, col + 1] = Convert.ToInt32(rst.Fields[0].Value);
ws.Cells[row, col + 2] = (Convert.ToDouble(rst.Fields[0].Value) / Convert.ToDouble(total)) + valorAnt;
valorAnt = Convert.ToDouble((Convert.ToDouble(rst.Fields[0].Value) / Convert.ToDouble(total))) + valorAnt;
row = row + 1;
rst.MoveNext();
}

ws = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBook.Sheets[1];
ChartObject ch = (ChartObject)ws.ChartObjects(1);
ws = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBook.Sheets[2];
ch.Chart.SetSourceData(ws.get_Range(ws.Cells[1, 1], ws.Cells[row - 1, 3]), Microsoft.Office.Interop.Excel.XlRowCol.xlColumns );
ch.Locked = false; ch.ProtectChartObject = false; ch = null;

ObjWorkBook.SaveAs(path.Replace("ParetosAverias.xlT", "ParetosAverias.xls"), XlFileFormat.xlWorkbookNormal,
null, null, false, false, XlSaveAsAccessMode.xlShared, false, false, null, null, null);
ObjWorkBook.Close(XlSaveAction.xlDoNotSaveChanges, Type.Missing, Type.Missing);
ObjWorkBook = null;
xlApp.Quit();
//mostrar los datos que acabamos de cubrir
MessageBox.Show("El documento se ha generado correctamente. A continuación se abrirá.");
ObjWorkBook = xlApp.Workbooks.Open(path.Replace("ParetosAverias.xlT", "ParetosAverias.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);
xlApp.Visible = true;
xlApp = null; ObjWorkBook = null;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Problema al desproteger hoja y gráfico en Excel al generar desde una plantilla

Publicado por Alejandro (265 intervenciones) el 02/02/2024 20:50:17
Fany, el problema que estás experimentando podría estar relacionado con la protección de la hoja de Excel. En tu código, estás intentando desproteger el gráfico, pero debes asegurarte de que la hoja que contiene el gráfico también esté desprotegida.

Aquí hay algunas sugerencias para asegurarte de que la hoja esté desprotegida correctamente:

1. Desproteger la hoja antes de modificar el gráfico:
Antes de realizar cambios en el gráfico, asegúrate de desproteger la hoja. Puedes agregar líneas de código para desproteger y luego volver a proteger la hoja después de realizar las modificaciones en el gráfico.

1
2
3
ws.Unprotect(); // Desproteger la hoja
// ... (realizar las modificaciones en el gráfico)
ws.Protect(); // Volver a proteger la hoja

2. Desproteger el gráfico antes de modificarlo:
Además de desproteger la hoja, asegúrate de desproteger el propio gráfico antes de intentar realizar modificaciones.

1
2
3
ch.Chart.ChartArea.Select();
xlApp.Selection.ShapeRange.Locked = false;
xlApp.Selection.ShapeRange.ProtectChartObject = false;

Asegúrate de agregar estas líneas antes de intentar modificar el gráfico.

3. Considera el modo de compatibilidad:
Si estás trabajando con formatos de archivo más antiguos (.xls), ten en cuenta que ciertas características avanzadas pueden no ser completamente compatibles. Si es posible, considera trabajar con formatos de archivo más recientes (.xlsx).

Espero que estas sugerencias te ayuden a solucionar el problema de la protección de la hoja y del gráfico en tu aplicación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar