C#操作office进行Excel图表创建,保存本地,word获取

来源:互联网 发布:壁虎老师java视频教程 编辑:程序博客网 时间:2024/05/16 18:29

1,新建C#控制台应用程序(Excel创建图表)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


//解决方案中 添加引用 Execl(COM组件)


using MSExcel = Microsoft.Office.Interop.Excel;
using System.IO;
using System.Reflection;


namespace ExeclCharts
{
    class Program
    {
        static void Main(string[] args)
        {
            object path; //文件路径变量
            MSExcel.Workbook excelDoc; //Excel文档变量
            MSExcel.Application excelApp; //Excel应用程序变量 MSExcel.Workbook excelDoc; //Excel文档变量
            path = @"C:\ExcelData\MyExcel.xlsx"; //路径
            excelApp = new MSExcel.Application(); //初始化 
            //vs2010不能用ApplicationClass(),而用Application();
            //如果已存在,则删除
            if (File.Exists((string)path))
            {
                File.Delete((string)path);
            }
            //由于使用的是COM库,因此有许多变量需要用Nothing代替 Object Nothing = Missing.Value;
            Object Nothing = Missing.Value;
            excelDoc = excelApp.Workbooks.Add(Nothing);
            //使用第一个工作表作为插入数据的工作表
            MSExcel.Worksheet ws = (MSExcel.Worksheet)excelDoc.Sheets[1]; //声明一个MSExcel.Range 类型的变量r
            MSExcel.Range r;
            //获得A1处的表格,并赋值
            r = ws.get_Range("A1", "A1");
            r.Value2 = "3";
            //获得A2处的表格,并赋值
            r = ws.get_Range("A2", "A2");
            r.Value2 = "5.7";
            //获得A3处的表格,并赋值
            r = ws.get_Range("A3", "A3");
            r.Value2 = "4.8";
            //获得A4处的表格,并赋值
            r = ws.get_Range("A4", "A4");
            r.Value2 = "9.2";


            //获得A1处的表格,并赋值
            r = ws.get_Range("B1", "B1");
            r.Value2 = "3";
            //获得A2处的表格,并赋值
            r = ws.get_Range("B2", "B2");
            r.Value2 = "5.7";
            //获得A3处的表格,并赋值
            r = ws.get_Range("B3", "B3");
            r.Value2 = "4.8";
            //获得A4处的表格,并赋值
            r = ws.get_Range("B4", "B4");
            r.Value2 = "9.2";


            //获得A1处的表格,并赋值
            r = ws.get_Range("C1", "C1");
            r.Value2 = "3";
            //获得A2处的表格,并赋值
            r = ws.get_Range("C2", "C2");
            r.Value2 = "5.7";
            //获得A3处的表格,并赋值
            r = ws.get_Range("C3", "C3");
            r.Value2 = "4.8";
            //获得A4处的表格,并赋值
            r = ws.get_Range("C4", "C4");
            r.Value2 = "9.2";


            excelDoc.Charts.Add(Nothing, Nothing, Nothing, Nothing);
            excelDoc.ActiveChart.ChartType = MSExcel.XlChartType.xlBubble;//xlBubble 指散点图   三维气泡图(xlBubble3DEffect)
            excelDoc.ActiveChart.SetSourceData(ws.get_Range("A1", "C4"), MSExcel.XlRowCol.xlColumns);
            excelDoc.ActiveChart.Location(MSExcel.XlChartLocation.xlLocationAsObject, "sheet1");
            excelDoc.ActiveChart.HasTitle = true;
            excelDoc.ActiveChart.ChartTitle.Text = "创建 - 散点图表";
            excelDoc.ActiveChart.HasDataTable = false;
            //WdSaveFormat为Excel文档的保存格式
            object format = MSExcel.XlFileFormat.xlWorkbookDefault;
            //将excelDoc文档对象的内容保存为XLSX文档
            excelDoc.SaveAs(path, format, Nothing, Nothing, Nothing, Nothing, MSExcel.XlSaveAsAccessMode.xlExclusive, Nothing, Nothing, Nothing, Nothing, Nothing);
            //关闭excelDoc文档对象
            excelDoc.Close(Nothing, Nothing, Nothing); //关闭excelApp组件对象
            excelApp.Quit();
            Console.WriteLine(path + " 创建完毕!");
        }
    }
}



2,新建空网站,添加一个页面,在页面中添加一个Button,添加事件(保存本地,word获取)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web.Security;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls.WebParts;
using System.Windows.Forms;//解决方案中 添加引用 System.Windows.Forms(.NET组件) 
using System.Threading;


using Microsoft.Office.Interop.Excel;
using MSExcel = Microsoft.Office.Interop.Excel;
using System.IO;
using System.Reflection;


using Microsoft.Office.Interop.Word;
using MSWord = Microsoft.Office.Interop.Word;


namespace WebCharts
{
    public partial class Index : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {


        }


        


        public void CopyExcel()
        {
            string exclePath = @"C:\ExcelData\MyExcel.xlsx";
            int StartRow = 1;    //读的起始行
            Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();//引用Excel对象
            Microsoft.Office.Interop.Excel.Workbook workbook = excel.Workbooks.Add(exclePath);
            excel.UserControl = true;
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            excel.Visible = false;
            for (int i = 0; i < workbook.Worksheets.Count; i++)//循环取所有的Sheet.
            {
                Microsoft.Office.Interop.Excel.Worksheet sheet = workbook.Worksheets.get_Item(i + 1) as Microsoft.Office.Interop.Excel.Worksheet;//从1开始.
                for (int row = StartRow; row <= sheet.UsedRange.Rows.Count; row++)
                {
                    //取单元格值;
                    for (int col = 1; col <= sheet.UsedRange.Columns.Count; col++)
                    {
                        Microsoft.Office.Interop.Excel.Range range = sheet.Cells[row, col] as Microsoft.Office.Interop.Excel.Range;
                        sb.Append("," + col.ToString() + ":" + range.Text);
                    }
                    sb.Append(System.Environment.NewLine);
                    //取存图片;
                    if (sheet.Shapes.Count > row - StartRow)
                    {
                        Microsoft.Office.Interop.Excel.Shape s = sheet.Shapes.Item(row - StartRow + 1) as Microsoft.Office.Interop.Excel.Shape;
                        
                        Clipboard.Clear();//Clipboard类是引用 .NET组件中System.Windows.Forms的
                        s.CopyPicture(Appearance.Button, Microsoft.Office.Interop.Excel.XlCopyPictureFormat.xlBitmap); //COPY到内存。
                        IDataObject iData = Clipboard.GetDataObject();


                        if (iData != null && iData.GetDataPresent(DataFormats.Bitmap))
                        {
                            System.Drawing.Image img = Clipboard.GetImage();  //从内存读取图片
                            if (img != null)
                            {
                                //保存图片位置
                                img.Save(@"C:\\ExcelData\\另存为.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);   //保存到本地
                            }
                        }
                        else
                        {
                        }
                    }
                }
            }
            workbook.Close(false, null, null);
            excel.Quit();
        }


        protected void btnExcel_Click1(object sender, EventArgs e)
        {
            Thread cbThread = new Thread(new ThreadStart(CopyExcel));
            cbThread.TrySetApartmentState(ApartmentState.STA);    //指定单线程,否则无法从剪贴板中读取数据
            cbThread.Start();










            /*  
             * 创建Word获取上面的图片
             */
            object path; //文件路径变量
            string strContent; //文本内容变量
            MSWord.Application wordApp; //Word应用程序变量
            MSWord.Document wordDoc; //Word文档变量


            path = @"C:\\ExcelData\\MyWord.docx"; //路径


            wordApp = new MSWord.Application(); //初始化


            //如果文件已存在,则删除
            if (File.Exists((string)path))
            {
                File.Delete((string)path);
            }


            //由于使用的是COM库,因此有许多变量需要用Missing.Value代替
            Object Nothing = Missing.Value;
            wordDoc = wordApp.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing);


            //设置文档的行间距 
            wordApp.Selection.ParagraphFormat.LineSpacing = 15f;


            //移动焦点并换行                 
            object count = 34;
            object WdLine = WdUnits.wdLine;//换一行                  
            wordApp.Selection.MoveDown(ref WdLine, ref count, ref Nothing);//移动焦点                 
            wordApp.Selection.TypeParagraph();//插入段落


            //文档中创建表格 
            Microsoft.Office.Interop.Word.Table newTable = wordDoc.Tables.Add(wordApp.Selection.Range, 25, 3, ref Nothing, ref Nothing);
            //设置表格样式 
            //newTable.Borders.OutsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleThickThinMedGap;//表格外框线
            newTable.Borders.InsideLineStyle = WdLineStyle.wdLineStyleSingle;//表格内架线
            //设置表格内框颜色
            newTable.Borders.InsideColor = WdColor.wdColorWhite;//  White:白色
            newTable.Columns[1].Width = 100f;
            newTable.Columns[2].Width = 220f;
            newTable.Columns[3].Width = 105f;


            //填充表格内容(第一行) 
            newTable.Cell(1, 1).Range.Text = "快速工况数据分析报告";
            newTable.Cell(1, 1).Range.Font.Size = 24;//设置单元格中字体大小为24
            newTable.Cell(1, 1).Range.Bold = 2;//设置单元格中字体为粗体
            newTable.Cell(1, 1).Merge(newTable.Cell(1, 3));//合并单元格
            wordApp.Selection.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter;//垂直居中                 
            wordApp.Selection.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;//水平居中                   


            //填充表格内容(第二行)                   
            newTable.Cell(2, 1).Range.Text = "基本信息:\n 1, \n 2,\r 3,";
            newTable.Cell(2, 1).Range.Font.Color = WdColor.wdColorDarkBlue;//设置单元格内字体颜色                   
            newTable.Cell(2, 1).Merge(newTable.Cell(2, 3));//合并单元格  
            wordApp.Selection.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter;


            //填充表格内容(第3行)                  
            newTable.Cell(3, 1).Range.Text = "名称:";
            newTable.Cell(3, 2).Range.Text = "BrandName";//?
            newTable.Cell(3, 2).Merge(newTable.Cell(3, 3));//合并单元格


            //填充表格内容(第4行)                      
            newTable.Cell(4, 1).Range.Text = "文档创建时间:";
            newTable.Cell(4, 2).Range.Text = DateTime.Now.ToString("yyyy年M月d日h时s分m秒fff毫秒");//
            newTable.Cell(4, 2).Merge(newTable.Cell(4, 3));//合并单元格


            //填充表格内容(第5行)                      
            newTable.Cell(5, 1).Range.Text = "一、转速-扭矩百分比的duty-Cycle图;(Map)";
            newTable.Cell(5, 1).Range.Font.Size = 14;//设置单元格中字体大小为14
            newTable.Cell(5, 1).Range.Bold = 2;//设置单元格中字体为粗体
            newTable.Cell(5, 1).Merge(newTable.Cell(5, 3));
            //填充表格内容(第6行)                      
            newTable.Cell(6, 1).Merge(newTable.Cell(6, 3));//合并单元格
            newTable.Cell(6, 1).Select();//选中一行
            //插入图片                  
            string A6FileName = @"C:\\ExcelData\\另存为.jpg";  //图片所在路径                 
            object A6LinkToFile = false;
            object A6SaveWithDocument = true;
            object A6Anchor = wordDoc.Application.Selection.Range;
            wordDoc.Application.ActiveDocument.InlineShapes.AddPicture(A6FileName, ref A6LinkToFile, ref A6SaveWithDocument, ref A6Anchor);


            //填充表格内容(第7行)
            newTable.Cell(7, 1).Range.Text = "二、转速-扭矩百分比的气泡图";
            newTable.Cell(7, 1).Range.Font.Size = 14;//设置单元格中字体大小为14
            newTable.Cell(7, 1).Range.Bold = 2;//设置单元格中字体为粗体
            newTable.Cell(7, 1).Merge(newTable.Cell(7, 3));
            //填充表格内容(第8行)
            newTable.Cell(8, 1).Merge(newTable.Cell(8, 3));//合并单元格
            newTable.Cell(8, 1).Select();//选中一行
            //插入图片                  
            string A8FileName = @"C:\\ExcelData\\另存为.jpg";  //图片所在路径                 
            object A8LinkToFile = false;
            object A8SaveWithDocument = true;
            object A8Anchor = wordDoc.Application.Selection.Range;
            wordDoc.Application.ActiveDocument.InlineShapes.AddPicture(A8FileName, ref A8LinkToFile, ref A8SaveWithDocument, ref A8Anchor);


            //填充表格内容(第9行)
            newTable.Cell(9, 1).Range.Text = "三、车速-转速的散点图";
            newTable.Cell(9, 1).Range.Font.Size = 14;//设置单元格中字体大小为14
            newTable.Cell(9, 1).Range.Bold = 2;//设置单元格中字体为粗体
            newTable.Cell(9, 1).Merge(newTable.Cell(9, 3));
            //填充表格内容(第10行)
            newTable.Cell(10, 1).Merge(newTable.Cell(10, 3));//合并单元格
            newTable.Cell(10, 1).Select();//选中一行
            //插入图片                  
            string A10FileName = @"C:\\ExcelData\\另存为.jpg";  //图片所在路径                 
            object A10LinkToFile = false;
            object A10SaveWithDocument = true;
            object A10Anchor = wordDoc.Application.Selection.Range;
            wordDoc.Application.ActiveDocument.InlineShapes.AddPicture(A10FileName, ref A10LinkToFile, ref A10SaveWithDocument, ref A10Anchor);


            //填充表格内容(第11行)
            newTable.Cell(11, 1).Range.Text = "四、车速柱状图";
            newTable.Cell(11, 1).Range.Font.Size = 14;//设置单元格中字体大小为14
            newTable.Cell(11, 1).Range.Bold = 2;//设置单元格中字体为粗体
            newTable.Cell(11, 1).Merge(newTable.Cell(11, 3));
            //填充表格内容(第12行)
            newTable.Cell(12, 1).Merge(newTable.Cell(12, 3));//合并单元格
            newTable.Cell(12, 1).Select();//选中一行
            //插入图片                  
            string A12FileName = @"C:\\ExcelData\\另存为.jpg";  //图片所在路径                 
            object A12LinkToFile = false;
            object A12SaveWithDocument = true;
            object A12Anchor = wordDoc.Application.Selection.Range;
            wordDoc.Application.ActiveDocument.InlineShapes.AddPicture(A12FileName, ref A12LinkToFile, ref A12SaveWithDocument, ref A12Anchor);
            //将图片设置为四周环绕型                 
            Microsoft.Office.Interop.Word.Shape c = wordDoc.Application.ActiveDocument.InlineShapes[1].ConvertToShape();
            c.WrapFormat.Type = WdWrapType.wdWrapSquare;


            //填充表格内容(第13行)
            newTable.Cell(13, 1).Range.Text = "五、转速柱状图";
            newTable.Cell(13, 1).Range.Font.Size = 14;//设置单元格中字体大小为14
            newTable.Cell(13, 1).Range.Bold = 2;//设置单元格中字体为粗体
            newTable.Cell(13, 1).Merge(newTable.Cell(13, 3));
            //填充表格内容(第14行)
            newTable.Cell(14, 1).Merge(newTable.Cell(14, 3));
            newTable.Cell(14, 1).Select();//选中一行
            //插入图片                  
            string A14FileName = @"C:\\ExcelData\\另存为.jpg";  //图片所在路径                 
            object A14LinkToFile = false;
            object A14SaveWithDocument = true;
            object A14Anchor = wordDoc.Application.Selection.Range;
            wordDoc.Application.ActiveDocument.InlineShapes.AddPicture(A14FileName, ref A14LinkToFile, ref A14SaveWithDocument, ref A14Anchor);
            //将图片设置为四周环绕型                 
            Microsoft.Office.Interop.Word.Shape c1 = wordDoc.Application.ActiveDocument.InlineShapes[1].ConvertToShape();
            c1.WrapFormat.Type = WdWrapType.wdWrapSquare;


            //填充表格内容(第15行)
            newTable.Cell(15, 1).Range.Text = "六、档位使用柱状图;(通过车辆信息设定来计算档位)";
            newTable.Cell(15, 1).Range.Font.Size = 14;//设置单元格中字体大小为14
            newTable.Cell(15, 1).Range.Bold = 2;//设置单元格中字体为粗体
            newTable.Cell(15, 1).Merge(newTable.Cell(15, 3));
            //填充表格内容(第16行)
            newTable.Cell(16, 1).Merge(newTable.Cell(16, 3));
            newTable.Cell(16, 1).Select();//选中一行
            //插入图片                  
            string A16FileName = @"C:\\ExcelData\\另存为.jpg";  //图片所在路径                 
            object A16LinkToFile = false;
            object A16SaveWithDocument = true;
            object A16Anchor = wordDoc.Application.Selection.Range;
            wordDoc.Application.ActiveDocument.InlineShapes.AddPicture(A16FileName, ref A16LinkToFile, ref A16SaveWithDocument, ref A16Anchor);
            //将图片设置为四周环绕型                 
            Microsoft.Office.Interop.Word.Shape c2 = wordDoc.Application.ActiveDocument.InlineShapes[1].ConvertToShape();
            c2.WrapFormat.Type = WdWrapType.wdWrapSquare;


            //填充表格内容(第17行)
            newTable.Cell(17, 1).Range.Text = "七、油门";
            newTable.Cell(17, 1).Range.Font.Size = 14;//设置单元格中字体大小为14
            newTable.Cell(17, 1).Range.Bold = 2;//设置单元格中字体为粗体
            newTable.Cell(17, 1).Merge(newTable.Cell(17, 3));
            //填充表格内容(第18行)
            newTable.Cell(18, 1).Merge(newTable.Cell(18, 3));
            newTable.Cell(18, 1).Select();//选中一行
            //插入图片                  
            string A18FileName = @"C:\\ExcelData\\另存为.jpg";  //图片所在路径                 
            object A18LinkToFile = false;
            object A18SaveWithDocument = true;
            object A18Anchor = wordDoc.Application.Selection.Range;
            wordDoc.Application.ActiveDocument.InlineShapes.AddPicture(A18FileName, ref A18LinkToFile, ref A18SaveWithDocument, ref A18Anchor);


            //填充表格内容(第19行)
            newTable.Cell(19, 1).Range.Text = "八、转速-油耗 气泡图";
            newTable.Cell(19, 1).Range.Font.Size = 14;//设置单元格中字体大小为14
            newTable.Cell(19, 1).Range.Bold = 2;//设置单元格中字体为粗体
            newTable.Cell(19, 1).Merge(newTable.Cell(19, 3));
            //填充表格内容(第20行)
            newTable.Cell(20, 1).Merge(newTable.Cell(20, 3));
            newTable.Cell(20, 1).Select();//选中一行
            //插入图片                  
            string A20FileName = @"C:\\ExcelData\\另存为.jpg";  //图片所在路径                 
            object A20LinkToFile = false;
            object A20SaveWithDocument = true;
            object A20Anchor = wordDoc.Application.Selection.Range;
            wordDoc.Application.ActiveDocument.InlineShapes.AddPicture(A20FileName, ref A20LinkToFile, ref A20SaveWithDocument, ref A20Anchor);


            //填充表格内容(第21行)
            newTable.Cell(21, 1).Range.Text = "九、转速-油耗、转速扭矩混合气泡图";
            newTable.Cell(21, 1).Range.Font.Size = 14;//设置单元格中字体大小为14
            newTable.Cell(21, 1).Range.Bold = 2;//设置单元格中字体为粗体
            newTable.Cell(21, 1).Merge(newTable.Cell(21, 3));
            //填充表格内容(第22行)
            newTable.Cell(22, 1).Merge(newTable.Cell(22, 3));
            newTable.Cell(22, 1).Select();//选中一行
            //插入图片                  
            string A22FileName = @"C:\\ExcelData\\另存为.jpg";  //图片所在路径                 
            object A22LinkToFile = false;
            object A22SaveWithDocument = true;
            object A22Anchor = wordDoc.Application.Selection.Range;
            wordDoc.Application.ActiveDocument.InlineShapes.AddPicture(A22FileName, ref A22LinkToFile, ref A22SaveWithDocument, ref A22Anchor);


            //填充表格内容(第23行)
            newTable.Cell(23, 1).Range.Text = "十、海拔高度时域曲线,在图上增加两个轴绘制出车速、转速的曲线";
            newTable.Cell(23, 1).Range.Font.Size = 14;//设置单元格中字体大小为14
            newTable.Cell(23, 1).Range.Bold = 2;//设置单元格中字体为粗体
            newTable.Cell(23, 1).Merge(newTable.Cell(23, 3));
            //填充表格内容(第24行)
            newTable.Cell(24, 1).Merge(newTable.Cell(24, 3));
            newTable.Cell(24, 1).Select();//选中一行
            //插入图片                  
            string A24FileName = @"C:\\ExcelData\\另存为.jpg";  //图片所在路径                 
            object A24LinkToFile = false;
            object A24SaveWithDocument = true;
            object A24Anchor = wordDoc.Application.Selection.Range;
            wordDoc.Application.ActiveDocument.InlineShapes.AddPicture(A24FileName, ref A24LinkToFile, ref A24SaveWithDocument, ref A24Anchor);


            //填充表格内容(第25行)
            newTable.Cell(25, 1).Range.Text = "文档创建时间:" + DateTime.Now.ToString("yyyy年M月d日h时s分m秒fff毫秒");
            newTable.Cell(25, 1).Range.Font.Size = 16;//设置单元格中字体大小为24
            newTable.Cell(25, 1).Merge(newTable.Cell(25, 3));//合并单元格
            //填充表格内容(第16行)
            //newTable.Cell(16, 1).Merge(newTable.Cell(16, 3));
            //newTable.Cell(16, 1).Select();//选中一行


            //WdSaveFormat为Word 2007文档的保存格式
            object format = MSWord.WdSaveFormat.wdFormatDocumentDefault;
            //将wordDoc文档对象的内容保存为DOCX文档
            wordDoc.SaveAs(ref path, ref format, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing);
            //关闭wordDoc文档对象
            wordDoc.Close(ref Nothing, ref Nothing, ref Nothing);
            //关闭wordApp组件对象
            wordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
            Console.WriteLine(path + " 创建完毕!");
        }
    }
}


原创粉丝点击