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;
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


0