.NET在Excel种画图(线形图)

网上很多种方法是定义ChartObject类或者Excel.Chart类,这样画出的图表是在一个大的Chart表中,而不是在Sheet表单中的图表。

http://support.microsoft.com/kb/302084?wa=wsignin1.0比如这个链接中所述的方法即是上面所说的。

 而我需要的则是在Sheet表中生成的小图,像下面这样:

我们先在Excel种用录制宏的方法来操作下生成线形图,来看看所生成的VBA代码如下:

Sub 宏6()
'
' 宏6 宏
'
       
'
    Columns("B:C").Select
    Range("B3968").Activate
    ActiveSheet.Shapes.AddChart2(227, xlLine).Select
    ActiveChart.SetSourceData Source:=Range("Sheet2!$B:$C")
End Sub

看出区别了,在Sheet表中的Chart应该是属于Shapes.Chart , 而且用Sheet.Shapes.AddChart来生成(在.net中没有Sheet.Shapes.AddChart2方法)。

结合之前写的向Excel中快速写入大量数据,添加自动生成线形图的功能:

Private Sub SaveToXls(StrData As String, StrFileName As String, Optional StrChartRange As String = Nothing)
   
    'StrChartRange = "A:B" or "A1:B9" or "A:A,D:D"
   
    If String.IsNullOrEmpty(StrData) Or String.IsNullOrEmpty(StrFileName) Then
        Return
    Else
        Dim xlApp As Microsoft.Office.Interop.Excel.Application = New Microsoft.Office.Interop.Excel.Application
   
        If IsNothing(xlApp) Then
            MessageBox.Show("无法创建Excel对象,可能您的系统未安装Excel")
        End If
        xlApp.DefaultFilePath = ""
        xlApp.DisplayAlerts = True
        xlApp.SheetsInNewWorkbook = 1
        Dim xlBook As Microsoft.Office.Interop.Excel.Workbook = xlApp.Workbooks.Add(True)
        Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet = xlBook.Worksheets.Add()
        System.Windows.Forms.Clipboard.SetDataObject(StrData)
        xlSheet.Paste()
   
        If Not IsNothing(StrChartRange) Then
            LineChart(xlSheet, xlSheet.Range(StrChartRange))
        End If
   
        xlBook.SaveAs(StrFileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing)
        xlBook.Close()
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)
        xlSheet = Nothing
        xlBook = Nothing
        xlApp.Quit()
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
        xlApp = Nothing
        GC.Collect()
    End If
   
End Sub
   
Private Sub LineChart(xlSheet As Microsoft.Office.Interop.Excel.Worksheet, oRange As Microsoft.Office.Interop.Excel.Range)
    Dim oShape As Microsoft.Office.Interop.Excel.Shape = xlSheet.Shapes.AddChart(Microsoft.Office.Interop.Excel.XlChartType.xlLine)
    Dim oChart As Microsoft.Office.Interop.Excel.Chart = oShape.Chart
    oChart.SetSourceData(oRange)
End Sub

以上代码即可产生第二幅图的图表效果!

转载于:https://www.cnblogs.com/jmpep/archive/2013/05/22/4486259.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用MFC中的COleDispatchDriver类来调用Excel的COM组件来画图。以下是一个简单的示例代码: 1. 首先需要在头文件中包含Excel的类型库: ``` #import "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" \ rename("DialogBox", "ExcelDialogBox") \ rename("RGB", "ExcelRGB") ``` 这里的路径是根据你的安装目录来定的,需要根据实际情况进行修改。 2. 在需要画图的位置,创建Excel的应用程序对象和工作簿对象: ``` // 创建Excel应用程序对象 CExcelApp excel; if (!excel.CreateDispatch(_T("Excel.Application"))) { AfxMessageBox(_T("Failed to create Excel application object.")); return; } // 创建工作簿对象 COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); COleVariant covWorkbook; covWorkbook.vt = VT_DISPATCH; covWorkbook.pdispVal = excel.GetWorkbooks()->Add(covOptional); ``` 3. 在工作簿中添加一个工作表,并获取该工作表的范围: ``` // 添加一个工作表 COleVariant covWorksheetName((LPCTSTR)_T("My Worksheet")); COleVariant covWorksheet; covWorksheet.vt = VT_DISPATCH; covWorksheet.pdispVal = covWorkbook.pdispVal->GetIDispatch(FALSE); covWorksheet = excel.GetSheets()->Add(covOptional, covWorksheet, covOptional, covOptional); covWorksheet.pdispVal->PutName(covOptional, covWorksheetName); // 获取工作表的范围 COleVariant covRange; covRange.vt = VT_DISPATCH; covRange.pdispVal = covWorksheet.pdispVal->InvokeHelper(dispidGetRange, DISPATCH_PROPERTYGET, covOptional, covOptional).pdispVal; ``` 4. 在工作表中设置数据并使用ChartWizard创建表: ``` // 设置数据 COleSafeArray saData; saData.CreateOneDim(VT_R8, 10); for (long i = 0; i < 10; i++) { double value = i * i; saData.PutElement(&i, &value); } covRange.put_Value(saData); // 使用ChartWizard创建表 COleVariant covChart; covChart.vt = VT_DISPATCH; covChart.pdispVal = covWorksheet.pdispVal->InvokeHelper(dispidChartWizard, DISPATCH_METHOD, covOptional, COleVariant((long)chChartTypeColumnClustered), COleVariant((long)2), COleVariant((long)1), COleVariant(_T("My Series")), COleVariant(_T("X Axis")), COleVariant(_T("Y Axis")), covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional).pdispVal; ``` 5. 释放资源: ``` // 释放资源 if (covWorkbook.pdispVal != NULL) { covWorkbook.pdispVal->Release(); } excel.Quit(); ``` 通过以上代码,就可以在MFC应用程序中使用Excel的COM组件来画图了。需要注意的是,需要在链接器的附加依赖项中添加"oleaut32.lib"和"ole32.lib"。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值