﻿<?xml version='1.0' encoding='UTF-8'?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>FusionCharts Forum / FusionCharts v3 / User Showcase  / Excel Exporter / Latest Posts</title><generator>InstantForum.NET v4.1.4</generator><description>FusionCharts Forum</description><link>http://www.fusioncharts.com/forum/</link><webMaster>support@fusioncharts.com</webMaster><lastBuildDate>Fri, 10 Oct 2008 17:15:12 GMT</lastBuildDate><ttl>20</ttl><item><title>RE: Excel Exporter</title><link>http://www.fusioncharts.com/forum/Topic32-8-1.aspx</link><description>Definitely online, the application launches in a few weeks when the main website is done.  If you would like to see it in action in the meantime feel free to email me and setup a meeting, would love to show you guys what we did with your charts.   This is for a academic research tool for qualatative and quantative data analysis.  &lt;/P&gt;&lt;P&gt;- J</description><pubDate>Tue, 19 Dec 2006 12:32:09 GMT</pubDate><dc:creator>psychcoder</dc:creator></item><item><title>RE: Excel Exporter</title><link>http://www.fusioncharts.com/forum/Topic32-8-1.aspx</link><description>The idea sounds really good. Thanks for the effort.&lt;/P&gt;&lt;P&gt;Just curious - do you have this hosted online, so that we can see it live?</description><pubDate>Mon, 18 Dec 2006 23:29:21 GMT</pubDate><dc:creator>Pallav</dc:creator></item><item><title>RE: Excel Exporter</title><link>http://www.fusioncharts.com/forum/Topic32-8-1.aspx</link><description>so for some reason the forum butchered all the for loops, replace ":" with ";"&lt;br&gt;&lt;br&gt;here they are&lt;br&gt;&lt;br&gt;1) x - iterate from 0 to xmlRoot.ChildNodes.Count &lt;br&gt;&lt;br&gt;2) r iterate from 0 to chartData.Count&lt;br&gt;&lt;br&gt;3) x - 	iterate from 0 to xmlRoot.ChildNodes.Count &lt;br&gt;&lt;br&gt;4) k - k iterate from 0 to valCount&lt;br&gt;&lt;br&gt;5) k -  iterate from 0 to xmlRoot.ChildNodes.Count&lt;br&gt;&lt;br&gt;6) x - iterate from 0 to eriesNames.Count&lt;br&gt;&lt;br&gt;7) x - iterate from 0 to eriesNames.Count</description><pubDate>Mon, 18 Dec 2006 15:09:59 GMT</pubDate><dc:creator>psychcoder</dc:creator></item><item><title>Excel Exporter</title><link>http://www.fusioncharts.com/forum/Topic32-8-1.aspx</link><description>So i have a flash app with a c# webservice backend, client wanted to be able to export the charts.    Wrote this to export to excel with table data and chart.  This code is messy as all hell as I haven't begun cleaning it up, but here we go.&lt;br&gt;&lt;br&gt;make sure you have a reference to "Microsoft Excel 11.0 Object Library" in your project.&lt;br&gt;&lt;br&gt;Again, this code needs to be cleaned and refactered, was written in 6 hrs with no previous experiance dealing with Excel automation.  If you need help with this send me a msg.  Need to ask to checks if caption or axisnames / labels left blank.&lt;br&gt;&lt;br&gt;using System;&lt;br&gt;using System.Data;&lt;br&gt;using System.Collections;&lt;br&gt;using System.IO;&lt;br&gt;using System.Text;&lt;br&gt;using System.Data;&lt;br&gt;using System.Reflection;&lt;br&gt;using System.Xml;&lt;br&gt;using Excel = Microsoft.Office.Interop.Excel;&lt;br&gt;&lt;br&gt;namespace DataExporter&lt;br&gt;{&lt;br&gt;	public class ChartItem&lt;br&gt;	{&lt;br&gt;		public string xItem;&lt;br&gt;		public string yItem;&lt;br&gt;		public ChartItem(string i_xItem, string i_yItem)&lt;br&gt;		{&lt;br&gt;			xItem = i_xItem;&lt;br&gt;			yItem = i_yItem;&lt;br&gt;		}&lt;br&gt;	}&lt;br&gt;&lt;br&gt;public class ChartExporter&lt;br&gt;	{&lt;br&gt;		Excel.Application		xlApp;&lt;br&gt;		Excel._Workbook			xlBook;&lt;br&gt;		Excel.Worksheet			xlSheet;&lt;br&gt;&lt;br&gt;		private object missing;&lt;br&gt;&lt;br&gt;		public string ExportSingleSeries(string xmlData, string fullFileName)&lt;br&gt;		{&lt;br&gt;			InitExcel();&lt;br&gt;&lt;br&gt;			if(xmlData.Length&gt;1)&lt;br&gt;			{&lt;br&gt;				XmlDocument xmlDoc		= new XmlDocument();&lt;br&gt;				xmlDoc.InnerXml			= xmlData;&lt;br&gt;				XmlElement xmlRoot		= xmlDoc.DocumentElement;&lt;br&gt;&lt;br&gt;				//Get Chart Info from XML&lt;br&gt;				string chartName, xAxisName, yAxisName, numberPrefix, showValues;&lt;br&gt;&lt;br&gt;				chartName		= xmlRoot.GetAttribute("caption");&lt;br&gt;				xAxisName		= xmlRoot.GetAttribute("xAxisName");&lt;br&gt;				yAxisName		= xmlRoot.GetAttribute("yAxisName");&lt;br&gt;				numberPrefix	= xmlRoot.GetAttribute("numberPrefix");&lt;br&gt;				showValues		= xmlRoot.GetAttribute("showValues");&lt;br&gt;				&lt;br&gt;				ArrayList chartData = new ArrayList();&lt;br&gt;				XmlNode curNode;&lt;br&gt;				for(int x=0; x&lt;xmlRoot.ChildNodes.Count; x++)&lt;br&gt;				{&lt;br&gt;					curNode = xmlRoot.ChildNodes[x];&lt;br&gt;					string curNodeName = curNode.Name;&lt;br&gt;					switch(curNodeName)&lt;br&gt;					{&lt;br&gt;						case "set":&lt;br&gt;							chartData.Add(new ChartItem(GetNodeVal(curNode,"label"), GetNodeVal(curNode,"value")));&lt;br&gt;							break;&lt;br&gt;					}&lt;br&gt;				}&lt;br&gt;				//rename the sheet&lt;br&gt;				xlSheet.Name	= chartName;&lt;br&gt;				xlSheet.get_Range("A1", missing).Font.Size = 12;&lt;br&gt;				xlSheet.get_Range("A1", missing).Font.Bold = true;&lt;br&gt;				xlSheet.get_Range("A1","I1").Merge(missing);&lt;br&gt;				xlSheet.get_Range("A1", missing).Value2 = chartName;&lt;br&gt;				xlSheet.get_Range("A1", missing).EntireColumn.AutoFit();&lt;br&gt;				//format headings;&lt;br&gt;			&lt;br&gt;				Excel.Range myRange = xlSheet.get_Range("A3","B3");&lt;br&gt;				myRange.Font.ColorIndex = 2;&lt;br&gt;				myRange.Interior.ColorIndex = 5;&lt;br&gt;				myRange.Font.Bold = true;&lt;br&gt;				myRange.Font.Size = 10;&lt;br&gt;&lt;br&gt;				//columns heading&lt;br&gt;				xlSheet.get_Range("A3", missing).Value2 = xAxisName;&lt;br&gt;				xlSheet.get_Range("A3", missing).BorderAround(missing, Excel.XlBorderWeight.xlMedium, Excel.XlColorIndex.xlColorIndexAutomatic, missing);&lt;br&gt;				xlSheet.get_Range("B3", missing).Value2 = yAxisName;&lt;br&gt;				xlSheet.get_Range("B3", missing).BorderAround(missing, Excel.XlBorderWeight.xlMedium, Excel.XlColorIndex.xlColorIndexAutomatic, missing);&lt;br&gt;			&lt;br&gt;				//pump data&lt;br&gt;				ChartItem curChartItem;&lt;br&gt;				int cellRow;&lt;br&gt;				for(int r=0; r&lt;chartData.Count; r++)&lt;br&gt;				{&lt;br&gt;					cellRow = (3+chartData.Count)-r;&lt;br&gt;					curChartItem = (ChartItem)chartData[r];&lt;br&gt;					xlSheet.get_Range("A"+cellRow,missing).Value2 = curChartItem.xItem;&lt;br&gt;					xlSheet.get_Range("A"+cellRow,missing).BorderAround(missing, Excel.XlBorderWeight.xlThick, Excel.XlColorIndex.xlColorIndexAutomatic, missing);&lt;br&gt;					xlSheet.get_Range("B"+cellRow,missing).Value2 = numberPrefix + curChartItem.yItem;&lt;br&gt;					xlSheet.get_Range("B"+cellRow,missing).BorderAround(missing, Excel.XlBorderWeight.xlThick, Excel.XlColorIndex.xlColorIndexAutomatic, missing);&lt;br&gt;				}&lt;br&gt;&lt;br&gt;				//Create the chart&lt;br&gt;				Excel.ChartObjects 	oCharts	= (Excel.ChartObjects)xlSheet.ChartObjects(missing);&lt;br&gt;				Excel.ChartObject	myChart = oCharts.Add(150,30,400,400);&lt;br&gt;				Excel.Chart			xlChart = myChart.Chart;&lt;br&gt;				myRange = xlSheet.get_Range("A3","B"+(chartData.Count+3));&lt;br&gt;				xlChart.SetSourceData(myRange, Excel.XlRowCol.xlColumns);&lt;br&gt;				xlChart.ChartType = Excel.XlChartType.xlBarClustered;&lt;br&gt;				xlChart.ApplyDataLabels(Excel.XlDataLabelsType.xlDataLabelsShowNone,missing, missing, missing, missing, missing, missing, missing, missing, missing);&lt;br&gt;				xlChart.HasLegend = false;&lt;br&gt;				//xlChart.Legend.Position = Excel.XlLegendPosition.xlLegendPositionBottom;&lt;br&gt;				xlChart.HasTitle = true;&lt;br&gt;				Excel.ChartGroup xlChartGroup = (Excel.ChartGroup) xlChart.ChartGroups(1);&lt;br&gt;				xlChartGroup.VaryByCategories = true;&lt;br&gt;&lt;br&gt;				xlChart.ChartTitle.Text = chartName;&lt;br&gt;				Excel.Axes xlAxisCategory, xlAxisValue;&lt;br&gt;&lt;br&gt;				xlAxisCategory = (Excel.Axes)xlChart.Axes(missing, Excel.XlAxisGroup.xlPrimary);&lt;br&gt;				xlAxisCategory.Item(Excel.XlAxisType.xlCategory, Excel.XlAxisGroup.xlPrimary).HasTitle = true;&lt;br&gt;				xlAxisCategory.Item(Excel.XlAxisType.xlCategory, Excel.XlAxisGroup.xlPrimary).AxisTitle.Text = xAxisName;&lt;br&gt;				xlAxisValue = (Excel.Axes)xlChart.Axes(missing, Excel.XlAxisGroup.xlPrimary);&lt;br&gt;				xlAxisValue.Item(Excel.XlAxisType.xlValue, Excel.XlAxisGroup.xlPrimary).HasTitle = true;&lt;br&gt;				xlAxisValue.Item(Excel.XlAxisType.xlValue, Excel.XlAxisGroup.xlPrimary).AxisTitle.Text = yAxisName;&lt;br&gt;			}&lt;br&gt;			FinishExport(fullFileName);&lt;br&gt;			return fullFileName;&lt;br&gt;		}&lt;br&gt;&lt;br&gt;&lt;br&gt;		public string ExportMultiSeries(string xmlData, string fullFileName)&lt;br&gt;		{&lt;br&gt;			InitExcel();&lt;br&gt;			if(xmlData.Length&gt;1)&lt;br&gt;			{&lt;br&gt;				XmlDocument xmlDoc		= new XmlDocument();&lt;br&gt;				xmlDoc.InnerXml			= xmlData;&lt;br&gt;				XmlElement xmlRoot		= xmlDoc.DocumentElement;&lt;br&gt;&lt;br&gt;				//Get Chart Info from XML&lt;br&gt;				string chartName, xAxisName, yAxisName, numberPrefix, showValues;&lt;br&gt;&lt;br&gt;				chartName		= xmlRoot.GetAttribute("caption");&lt;br&gt;				xAxisName		= xmlRoot.GetAttribute("xAxisName");&lt;br&gt;				yAxisName		= xmlRoot.GetAttribute("yAxisName");&lt;br&gt;				numberPrefix	= xmlRoot.GetAttribute("numberPrefix");&lt;br&gt;				showValues		= xmlRoot.GetAttribute("showValues");&lt;br&gt;				&lt;br&gt;				//rename the sheet&lt;br&gt;				xlSheet.Name	= chartName;&lt;br&gt;				xlSheet.get_Range("A1", missing).Font.Size = 12;&lt;br&gt;				xlSheet.get_Range("A1", missing).Font.Bold = true;&lt;br&gt;				xlSheet.get_Range("A1","I1").Merge(missing);&lt;br&gt;				xlSheet.get_Range("A1", missing).Value2 = chartName;&lt;br&gt;				xlSheet.get_Range("A1", missing).EntireColumn.AutoFit();&lt;br&gt;&lt;br&gt;				ArrayList seriesNames = new ArrayList();&lt;br&gt;				int seriesCount=0;&lt;br&gt;				int valCount =0;&lt;br&gt;				int cellRow;&lt;br&gt;&lt;br&gt;				XmlNode curNode, catNode, dataNode;&lt;br&gt;				for(int x=0; x&lt;xmlRoot.ChildNodes.Count; x++)&lt;br&gt;				{&lt;br&gt;					curNode = xmlRoot.ChildNodes[x];&lt;br&gt;					string curNodeName = curNode.Name;&lt;br&gt;					switch(curNodeName)&lt;br&gt;					{&lt;br&gt;						case "categories":&lt;br&gt;							valCount = curNode.ChildNodes.Count;&lt;br&gt;							for(int k=0; k&lt;valCount;k++)&lt;br&gt;							{&lt;br&gt;								catNode = curNode.ChildNodes[k];&lt;br&gt;								cellRow = (3+valCount)-k;&lt;br&gt;								xlSheet.get_Range("A"+cellRow,missing).Value2 = GetNodeVal(catNode,"label");&lt;br&gt;								xlSheet.get_Range("A"+cellRow,missing).BorderAround(missing, Excel.XlBorderWeight.xlThick, Excel.XlColorIndex.xlColorIndexAutomatic, missing);&lt;br&gt;							}&lt;br&gt;&lt;br&gt;							break;&lt;br&gt;						case "dataset":&lt;br&gt;							seriesCount++;&lt;br&gt;							seriesNames.Add(GetNodeVal(curNode, "seriesName"));&lt;br&gt;							for(int k=0; k&lt;curNode.ChildNodes.Count;k++)&lt;br&gt;							{&lt;br&gt;								dataNode = curNode.ChildNodes[k];&lt;br&gt;								string colName = GetColName(seriesCount+1);&lt;br&gt;								cellRow = (3+valCount)-k;&lt;br&gt;								xlSheet.get_Range(colName+cellRow,missing).Value2 = GetNodeVal(dataNode,"value");&lt;br&gt;								xlSheet.get_Range(colName+cellRow,missing).BorderAround(missing, Excel.XlBorderWeight.xlThick, Excel.XlColorIndex.xlColorIndexAutomatic, missing);&lt;br&gt;							}&lt;br&gt;							break;&lt;br&gt;					}&lt;br&gt;				}&lt;br&gt;&lt;br&gt;				&lt;br&gt;				//format headings;&lt;br&gt;				Excel.Range myRange = xlSheet.get_Range("A3",GetColName(seriesCount+1)+"3");&lt;br&gt;				myRange.Font.ColorIndex = 2;&lt;br&gt;				myRange.Interior.ColorIndex = 5;&lt;br&gt;				myRange.Font.Bold = true;&lt;br&gt;				myRange.Font.Size = 10;&lt;br&gt;&lt;br&gt;				//columns heading&lt;br&gt;				xlSheet.get_Range("A3", missing).Value2 = xAxisName;&lt;br&gt;				xlSheet.get_Range("A3", missing).BorderAround(missing, Excel.XlBorderWeight.xlMedium, Excel.XlColorIndex.xlColorIndexAutomatic, missing);&lt;br&gt;				for(int x=0; x&lt;seriesNames.Count; x++)&lt;br&gt;				{&lt;br&gt;					xlSheet.get_Range(GetColName(x+2)+"3", missing).Value2 = (string) seriesNames[x];&lt;br&gt;					xlSheet.get_Range(GetColName(x+2)+"3", missing).BorderAround(missing, Excel.XlBorderWeight.xlMedium, Excel.XlColorIndex.xlColorIndexAutomatic, missing);&lt;br&gt;				}&lt;br&gt;&lt;br&gt;				//Create the chart&lt;br&gt;				Excel.ChartObjects 	oCharts	= (Excel.ChartObjects)xlSheet.ChartObjects(missing);&lt;br&gt;				Excel.ChartObject	myChart = oCharts.Add(150,30,400,400);&lt;br&gt;				Excel.Chart			xlChart = myChart.Chart;&lt;br&gt;				myRange = xlSheet.get_Range("A4", GetColName(seriesCount+1) + (valCount+3));&lt;br&gt;				xlChart.SetSourceData(myRange, Excel.XlRowCol.xlColumns);&lt;br&gt;				xlChart.ChartType = Excel.XlChartType.xlBarClustered;&lt;br&gt;				xlChart.ApplyDataLabels(Excel.XlDataLabelsType.xlDataLabelsShowNone,missing, missing, missing, missing, missing, missing, missing, missing, missing);&lt;br&gt;				xlChart.HasLegend = true;&lt;br&gt;				xlChart.Legend.Position = Excel.XlLegendPosition.xlLegendPositionBottom;&lt;br&gt;				xlChart.HasTitle = true;&lt;br&gt;&lt;br&gt;				xlChart.ChartTitle.Text = chartName;&lt;br&gt;&lt;br&gt;				Excel.Series mySeries;&lt;br&gt;				for(int x=0; x&lt;seriesNames.Count; x++)&lt;br&gt;				{&lt;br&gt;					mySeries = (Excel.Series)xlChart.SeriesCollection(x+1);&lt;br&gt;					mySeries.Name = (string) seriesNames[x];&lt;br&gt;				}		&lt;br&gt;			}&lt;br&gt;			FinishExport(fullFileName);&lt;br&gt;			return fullFileName;&lt;br&gt;		}&lt;br&gt;&lt;br&gt;		private void InitExcel()&lt;br&gt;		{&lt;br&gt;			missing = System.Reflection.Missing.Value;&lt;br&gt;			xlApp = new Excel.Application();&lt;br&gt;			xlApp.DisplayAlerts = true;&lt;br&gt;			xlApp.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);&lt;br&gt;			xlBook = xlApp.Workbooks.Add(missing);&lt;br&gt;			while(xlBook.Worksheets.Count&gt;1)&lt;br&gt;			{&lt;br&gt;				Excel.Worksheet tmpSheet = (Excel.Worksheet) xlBook.Worksheets[1];&lt;br&gt;				tmpSheet.Delete();&lt;br&gt;			}&lt;br&gt;			xlApp.Visible	= false;&lt;br&gt;			xlSheet = (Excel.Worksheet)xlBook.Worksheets[1];&lt;br&gt;		}&lt;br&gt;		private void FinishExport(string fullFileName)&lt;br&gt;		{&lt;br&gt;			xlBook.SaveAs(fullFileName, Excel.XlFileFormat.xlWorkbookNormal, missing, missing, missing, missing, Excel.XlSaveAsAccessMode.xlExclusive, missing, missing, missing, missing, missing);&lt;br&gt;			xlApp.Quit();&lt;br&gt;		}&lt;br&gt;		private string GetNodeVal(XmlNode theNode, string valueName)&lt;br&gt;		{&lt;br&gt;			return theNode.Attributes.GetNamedItem(valueName).Value;&lt;br&gt;		}&lt;br&gt;		private string GetColName(int colIndex) // takes positive, non zero, colIndex (1-x)&lt;br&gt;		{&lt;br&gt;			string colChars = "ABCDEFGHIJKLMNOPQRSTUV";&lt;br&gt;			string returnStr = "";&lt;br&gt;			if(colIndex&gt;26)&lt;br&gt;			{&lt;br&gt;				int firstInt = (int) Math.Floor((colIndex*1.000)/26);&lt;br&gt;				int seconInt = colIndex%26;&lt;br&gt;				char firstChar = colChars[firstInt-1];&lt;br&gt;				char seconChar = colChars[seconInt-1];&lt;br&gt;				returnStr +=  firstChar + seconChar;&lt;br&gt;			}&lt;br&gt;			else&lt;br&gt;			{&lt;br&gt;				returnStr += colChars[colIndex-1];&lt;br&gt;				&lt;br&gt;			}&lt;br&gt;			return returnStr;&lt;br&gt;		}&lt;br&gt;&lt;br&gt;</description><pubDate>Mon, 18 Dec 2006 14:58:03 GMT</pubDate><dc:creator>psychcoder</dc:creator></item></channel></rss>