Click here to Skip to main content
15,879,095 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
Hello Everybody,

We have created dynamic column chart using Microsoft word interop. Chart is generated successfully but sometimes it loads fresh chart or sometimes it takes data itself and generate chart with dummy data.

Our code is as below.

object bookmarkName = "PlaceChartHere";
MSWord.Range wrdRng = wordDoc.Bookmarks.get_Item(ref bookmarkName).Range;
MSWord.InlineShape wrdInlineShape1 = wordDoc.InlineShapes.AddChart2(-1, XlChartType.xlColumnStacked, wrdRng);

var chartStackedCol = wrdInlineShape1.Chart;

chartStackedCol.ChartTitle.Text = "Chart Title";

Microsoft.Office.Interop.Excel.Workbook obook1 = (Microsoft.Office.Interop.Excel.Workbook)chartStackedCol.ChartData.Workbook;
Microsoft.Office.Interop.Excel.Worksheet sheet1 = (Microsoft.Office.Interop.Excel.Worksheet)obook1.Worksheets["Sheet1"];

It will open excel in background using dummy data.

We have changed that data using code as under.

((Microsoft.Office.Interop.Excel.Range)sheet1.Cells[1, 2]).Value = "Data1";
((Microsoft.Office.Interop.Excel.Range)sheet1.Cells[1, 3]).Value = "Data2";
((Microsoft.Office.Interop.Excel.Range)sheet1.Cells[1, 4]).Value = "Data3";

((Microsoft.Office.Interop.Excel.Range)sheet1.Cells[2, 1]).Value = "Test1";
((Microsoft.Office.Interop.Excel.Range)sheet1.Cells[3, 1]).Value = "Test2";

sheet1.Range["B2"].FormulaR1C1 = 10;
sheet1.Range["B3"].FormulaR1C1 = 20;

sheet1.Range["C2"].FormulaR1C1 = 30;
sheet1.Range["C3"].FormulaR1C1 = 40;

sheet1.Range["D2"].FormulaR1C1 = 50;
sheet1.Range["D3"].FormulaR1C1 = 60;

But sometimes it takes fresh data and generate chart or sometimes it takes dummy data from excel and generate chart with dummy data.

Looking for your response.
Thanks,

Rachana Shah Vaghela

What I have tried:

We have tried below methods to refresh chart. but not getting luck.

chartStackedCol.ChartData.Activate();
chartStackedCol.Refresh();
wordApp.ScreenUpdating = true;
wordDoc.Application.ScreenRefresh();
Posted
Updated 5-Sep-21 23:46pm

1 solution

//Create an instance for word app  
            Microsoft.Office.Interop.Word.Application winword = new Microsoft.Office.Interop.Word.Application();

            //Set animation status for word application  
            winword.ShowAnimation = false;

            //Set status for word application is to be visible or not.  
            winword.Visible = false;

            //Create a missing variable for missing value  
            object missing = System.Reflection.Missing.Value;

            //Create a new document  
            Microsoft.Office.Interop.Word.Document document = winword.Documents.Add(ref missing, ref missing, ref missing, ref missing);


            object bookmarkName = "PlaceChartHere";
            //var wrdRng = document.Bookmarks.get_Item(ref bookmarkName).Range;
            Microsoft.Office.Interop.Word.InlineShape wrdInlineShape1 = document.InlineShapes.AddChart2(-1, XlChartType.xlColumnStacked);

            var chartStackedCol = wrdInlineShape1.Chart;

            chartStackedCol.ChartTitle.Text = "Chart Title";

            Microsoft.Office.Interop.Excel.Workbook obook1 = (Microsoft.Office.Interop.Excel.Workbook)chartStackedCol.ChartData.Workbook;
            Microsoft.Office.Interop.Excel.Worksheet sheet1 = (Microsoft.Office.Interop.Excel.Worksheet)obook1.Worksheets["Sheet1"];

            ((Microsoft.Office.Interop.Excel.Range)sheet1.Cells[1, 2]).Value = "Data1";
            ((Microsoft.Office.Interop.Excel.Range)sheet1.Cells[1, 3]).Value = "Data2";
            ((Microsoft.Office.Interop.Excel.Range)sheet1.Cells[1, 4]).Value = "Data3";

            ((Microsoft.Office.Interop.Excel.Range)sheet1.Cells[2, 1]).Value = "Test1";
            ((Microsoft.Office.Interop.Excel.Range)sheet1.Cells[3, 1]).Value = "Test2";

            sheet1.Range["B2"].FormulaR1C1 = 100;
            sheet1.Range["B3"].FormulaR1C1 = 204;

            sheet1.Range["C2"].FormulaR1C1 = 30;
            sheet1.Range["C3"].FormulaR1C1 = 40;

            sheet1.Range["D2"].FormulaR1C1 = 1;
            sheet1.Range["D3"].FormulaR1C1 = 620;


            chartStackedCol.ChartData.Activate();
            chartStackedCol.Refresh();
            winword.ScreenUpdating = true;
            document.Application.ScreenRefresh();

            //Save the document  
            object filename = AppDomain.CurrentDomain.BaseDirectory + "Chartrefresh.docx";
            document.SaveAs2(ref filename);
            document.Close(ref missing, ref missing, ref missing);
            document = null;
            winword.Quit(ref missing, ref missing, ref missing);
            winword = null;
            MessageBox.Show("Document created successfully !");
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900