﻿<?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 </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, 16 May 2008 01:25:05 GMT</lastBuildDate><ttl>20</ttl><item><title>Javascript slicing for pie charts</title><link>http://www.fusioncharts.com/forum/Topic4586-8-1.aspx</link><description>The following example uses links which rebuild the chart with the slice that is clicked on pulled out or if it is out it will go back in.  When the "Analyze Events" button is clicked the alert will display the label of the slices that&lt;br&gt;are out.&lt;br&gt;&lt;br&gt;The file with the example is attached as a .txt file because the [code][/code] wouldn't work and .html files are not allowed as attachements.  Change the file extension to html and it will work fine.</description><pubDate>Tue, 19 Feb 2008 11:14:48 GMT</pubDate><dc:creator>bsklar</dc:creator></item><item><title>FusionCharts 2DPie With Legend - Demystified</title><link>http://www.fusioncharts.com/forum/Topic2211-8-1.aspx</link><description>It is quite cumbersome to work with 2D Pies and legends in FusionCharts. At least I think it is. This makes life easier. :cool:&lt;BR&gt;The grid component, opposite what you might think from the examples, actually works. You can place it on top of a chart. You can make it look good. &lt;BR&gt;There are also all sorts of small problems working with the grid component as a label, some of which are solved here.&lt;P&gt;On the attached page you will find a solution that takes care of a number of issues with labels and pie charts (the same thechnique can of course be used in any 2D dimensional graph):&lt;/P&gt;&lt;P&gt;- places the label on top of the pie&lt;BR&gt;- fixes a problem with rendering label borders - not completely, but very close&lt;BR&gt;- fixes the bizarre problem of counter clockwise rotation in pie charts&lt;BR&gt;&lt;BR&gt;Of course, this can be improved. I can think of a few things:&lt;BR&gt;- calculating the legend width from the font size&lt;BR&gt;- parameters for placing the legend on either side of the chart&lt;BR&gt;&lt;BR&gt;I'm sure you clever guys out there can make it better!&lt;/P&gt;&lt;P&gt;To see it in action:&lt;BR&gt;- Click on the link to the attached TXT-file.&lt;/P&gt;&lt;P&gt;To download:&lt;BR&gt;1. Right click and save the TXT-file&lt;BR&gt;2. Change the file extension to HTML&lt;BR&gt;3. Put it on your web-server&lt;BR&gt;4. Change the paths to your FusionChart JavaScript library&lt;BR&gt;5. Change the path to your swf files&lt;BR&gt;&lt;/P&gt;&lt;P&gt;Hope you like it.&lt;/P&gt;&lt;P&gt;/Hans&lt;BR&gt;</description><pubDate>Sun, 02 Sep 2007 12:48:04 GMT</pubDate><dc:creator>MrFast</dc:creator></item><item><title>Cruise site uses gantt charts plus XY scatter charts</title><link>http://www.fusioncharts.com/forum/Topic4411-8-1.aspx</link><description>We've loved using fusion charts and wanted to share some of our implementations. We've mainly used Gantt charts and scatter charts. Please let us know what you think.&lt;br&gt;&lt;br&gt;* Gantt chart used as calender for cruise searches - [url=http://www.cleancruising.com.au]www.cleancruising.com.au[/url]&lt;br&gt;* Gantt chart used as calendar to display cruises through each port - [url=http://www.cleancruising.com.au/port.asp?port=AUSYD]Sydney, Australia[/url]&lt;br&gt;* XY scatter chart used to compare cruise ships - [url=http://www.cleancruising.com.au/shiplist.asp]shiplist[/url]&lt;br&gt;&lt;br&gt;The xml files are built on the fly by an asp script. We've got an ajax version of these working but not live yet, will share it here when it's up. Thanks for taking a look.&lt;br&gt;</description><pubDate>Thu, 07 Feb 2008 02:32:25 GMT</pubDate><dc:creator>CleanCruiser</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>