• C#向Excel报表中插入图片的2种方法


    一、插图的类(含2方法)
      1using System;
      2using System.Collections.Generic;
      3using System.Text;
      4//using Excel = Microsoft.Office.Interop.Excel;
      5using Excel;
      6using System.Windows.Forms;
      7
      8
      9namespace ExcelReport
     10{
     11    class InsertPicToExcel
     12    {
     13        /// <summary>
     14        /// 打开没有模板的操作。
     15        /// </summary>

     16        public void Open()
     17        {
     18            this.Open(String.Empty);
     19        }

     20
     21        /// <summary>
     22        /// 功能:实现Excel应用程序的打开
     23        /// </summary>
     24        /// <param name="TemplateFilePath">模板文件物理路径</param>

     25        public void Open(string TemplateFilePath)
     26        {
     27            //打开对象
     28            m_objExcel = new Excel.Application();
     29            m_objExcel.Visible = false;
     30            m_objExcel.DisplayAlerts = false;
     31
     32            if (m_objExcel.Version != "11.0")
     33            {
     34                MessageBox.Show("您的 Excel 版本不是 11.0 (Office 2003),操作可能会出现问题。");
     35                m_objExcel.Quit();
     36                return;
     37            }

     38
     39            m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
     40            if (TemplateFilePath.Equals(String.Empty))
     41            {
     42                m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
     43            }

     44            else
     45            {
     46                m_objBook = m_objBooks.Open(TemplateFilePath, m_objOpt, m_objOpt, m_objOpt, m_objOpt,
     47                  m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
     48            }

     49            m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
     50            m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
     51            m_objExcel.WorkbookBeforeClose += new Excel.AppEvents_WorkbookBeforeCloseEventHandler(m_objExcel_WorkbookBeforeClose);
     52        }

     53
     54        private void m_objExcel_WorkbookBeforeClose(Excel.Workbook m_objBooks, ref bool _Cancel)
     55        {
     56            MessageBox.Show("保存完毕!");
     57        }

     58
     59        /// <summary>
     60        /// 将图片插入到指定的单元格位置。
     61        /// 注意:图片必须是绝对物理路径
     62        /// </summary>
     63        /// <param name="RangeName">单元格名称,例如:B4</param>
     64        /// <param name="PicturePath">要插入图片的绝对路径。</param>

     65        public void InsertPicture(string RangeName, string PicturePath)
     66        {
     67            m_objRange = m_objSheet.get_Range(RangeName, m_objOpt);
     68            m_objRange.Select();
     69            Excel.Pictures pics = (Excel.Pictures)m_objSheet.Pictures(m_objOpt);
     70            pics.Insert(PicturePath, m_objOpt);
     71        }

     72
     73        /// <summary>
     74        /// 将图片插入到指定的单元格位置,并设置图片的宽度和高度。
     75        /// 注意:图片必须是绝对物理路径
     76        /// </summary>
     77        /// <param name="RangeName">单元格名称,例如:B4</param>
     78        /// <param name="PicturePath">要插入图片的绝对路径。</param>
     79        /// <param name="PictuteWidth">插入后,图片在Excel中显示的宽度。</param>
     80        /// <param name="PictureHeight">插入后,图片在Excel中显示的高度。</param>

     81        public void InsertPicture(string RangeName, string PicturePath, float PictuteWidth, float PictureHeight)
     82        {
     83            m_objRange = m_objSheet.get_Range(RangeName, m_objOpt);
     84            m_objRange.Select();
     85            float PicLeft, PicTop;
     86            PicLeft = Convert.ToSingle(m_objRange.Left);
     87            PicTop = Convert.ToSingle(m_objRange.Top);
     88            //参数含义:
     89            //图片路径
     90            //是否链接到文件
     91            //图片插入时是否随文档一起保存
     92            //图片在文档中的坐标位置(单位:points)
     93            //图片显示的宽度和高度(单位:points)
     94            //参数详细信息参见:http://msdn2.microsoft.com/zh-cn/library/aa221765(office.11).aspx
     95            m_objSheet.Shapes.AddPicture(PicturePath,Microsoft.Office.Core.MsoTriState.msoFalse,
     96              Microsoft.Office.Core.MsoTriState.msoTrue, PicLeft, PicTop, PictuteWidth, PictureHeight);
     97        }

     98
     99        /// <summary>
    100        /// 将Excel文件保存到指定的目录,目录必须事先存在,文件名称不一定要存在。
    101        /// </summary>
    102        /// <param name="OutputFilePath">要保存成的文件的全路径。</param>

    103        public void SaveFile(string OutputFilePath)
    104        {
    105            m_objBook.SaveAs(OutputFilePath, m_objOpt, m_objOpt,
    106              m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange,
    107              m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
    108
    109            this.Close();
    110        }

    111        /// <summary>
    112        /// 关闭应用程序
    113        /// </summary>

    114        private void Close()
    115        {
    116            m_objBook.Close(false, m_objOpt, m_objOpt);
    117            m_objExcel.Quit();
    118        }

    119
    120        /// <summary>
    121        /// 释放所引用的COM对象。注意:这个过程一定要执行。
    122        /// </summary>

    123        public void Dispose()
    124        {
    125            ReleaseObj(m_objSheets);
    126            ReleaseObj(m_objBook);
    127            ReleaseObj(m_objBooks);
    128            ReleaseObj(m_objExcel);
    129            System.GC.Collect();
    130            System.GC.WaitForPendingFinalizers();
    131        }

    132        /// <summary>
    133        /// 释放对象,内部调用
    134        /// </summary>
    135        /// <param name="o"></param>

    136        private void ReleaseObj(object o)
    137        {
    138            try
    139            {
    140                System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
    141            }

    142            catch { }
    143            finally { o = null; }
    144        }

    145
    146        private Excel.Application m_objExcel = null;
    147        private Excel.Workbooks m_objBooks = null;
    148        private Excel._Workbook m_objBook = null;
    149        private Excel.Sheets m_objSheets = null;
    150        private Excel._Worksheet m_objSheet = null;
    151        private Excel.Range m_objRange = null;
    152        private object m_objOpt = System.Reflection.Missing.Value;
    153    }

    154    
    155}

    156

    二、调用
     1using System;
     2using System.Collections.Generic;
     3using System.ComponentModel;
     4using System.Data;
     5using System.Drawing;
     6using System.Text;
     7using System.Windows.Forms;
     8
     9namespace ExcelReport
    10{
    11    public partial class Form1 : Form
    12    {
    13        public Form1()
    14        {
    15            InitializeComponent();
    16        }

    17
    18        private void Form1_Load(object sender, EventArgs e)
    19        {
    20            InsertPicToExcel ipt = new InsertPicToExcel();
    21            ipt.Open();
    22            ipt.InsertPicture("B2"@"C:\Excellogo.gif");
    23            ipt.InsertPicture("B18"@"C:\Excellogo.gif"12080);
    24            ipt.SaveFile(@"C:\ExcelTest.xls");
    25            ipt.Dispose();
    26        }

    27        
    28    }

    29}
  • 相关阅读:
    Semaphore类
    我的java学习之路五:java的循环和条件语句
    我的java学习之路四:java的基础类型和变量
    第一节 线性表
    我的java学习之路三:java的类与对象
    我的Java学习之路二:Java基础语法
    算法分析一:基本定义
    我的java学习之路一:java的安装以及环境配置
    【2019 CCPC 江西省赛】Cotree 树重心
    【2018 icpc 南京站】G
  • 原文地址:https://www.cnblogs.com/winnxm/p/1226027.html
Copyright © 2020-2023  润新知