zoukankan      html  css  js  c++  java
  • C#实现使用Excel COM组件向Excel文件中添加图片的Demo

    需要添加Microsoft.Office.Interop.Excel;及Microsoft.Office.Core;两个命名空间及对应的引用。

    比如我Windows 7下装的Office 2007,是添加的是一个COM组件和一个.Net组件的引用,如下图:

    image

    而我公司的电脑添加的是Microsoft Excel Object Library 和Microsoft Object Library 。

    代码如下:

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Reflection;
    using System.IO;
    using Microsoft.Office.Interop.Excel;
    using Microsoft.Office.Core;
    
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    
        protected void Button1_Click(object sender, EventArgs e)
        {
            Microsoft.Office.Interop.Excel.Application app = new Application();
            app.Visible = false;
            app.DisplayAlerts = false;
    
            Workbook workBook = app.Workbooks.Open(Server.MapPath("test_ Excel.xls"),
                                Missing.Value, Missing.Value, Missing.Value,
                                Missing.Value,Missing.Value, Missing.Value, 
                                Missing.Value, Missing.Value,Missing.Value, 
                                Missing.Value, Missing.Value, Missing.Value,
                                Missing.Value, Missing.Value);
    
            //设置为操作当前workBook的sheet1
            Worksheet workSheet = (Worksheet)workBook.Worksheets[1];
    
            string imgPath = Server.MapPath("test_Img.jpg");
            byte[] bytesArr = PicToByteArr(imgPath);
            System.Drawing.Image bmp = ReturnPhoto(bytesArr);//图片数据
    
            int x = 1;
            int y = 1;
            Range rangeTemp = workSheet.get_Range((Range)workSheet.Cells[x, y],
                                                  (Range)workSheet.Cells[x, y]);
            //rangeTemp.Select();
    
            float PicLeft, PicTop;
            PicLeft = Convert.ToSingle(rangeTemp.Left) + 2;
            PicTop = Convert.ToSingle(rangeTemp.Top) + 1;
    
            workSheet.Shapes.AddPicture(imgPath,
                        Microsoft.Office.Core.MsoTriState.msoFalse,
                        Microsoft.Office.Core.MsoTriState.msoTrue,
                        PicLeft, PicTop, bmp.Width * 8 / 10, bmp.Height * 8 / 10);
            workBook.Save();
    
            workBook.Close(null, null, null);
            app.Workbooks.Close();
            app.Quit();
    
            System.Runtime.InteropServices.Marshal.ReleaseComObject(rangeTemp);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
            System.GC.Collect();
            System.GC.WaitForPendingFinalizers();
        }
    
        /// <summary>
        /// 将图片转换为字节数组
        /// </summary>
        /// <param name="path">图片的路径</param>
        /// <returns>字节数组</returns>
        public byte[] PicToByteArr(string path)
        {
            FileStream fs = new FileStream(path, FileMode.Open);//将图片写入流中。
            int filelength = 0;
            filelength = (int)fs.Length; //获得文件长度
            Byte[] byteArr = new Byte[filelength]; //建立一个字节数组
            fs.Read(byteArr, 0, filelength); //按字节流读取            
            fs.Close();
            return byteArr;
        }
    
        /// <summary>
        /// 参数是byte返回图片
        /// </summary>
        /// <param name="byteArr">字节数组</param>
        /// <returns>图片</returns>
        public System.Drawing.Image ReturnPhoto(byte[] byteArr)
        {
            MemoryStream ms = new MemoryStream(byteArr);
            System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
            ms.Close();
            return img;
        }
    }
    

      

  • 相关阅读:
    (Redis基础教程之十) 如何在Redis中运行事务
    (Python基础教程之十三)Python中使用httplib2 – HTTP GET和POST示例
    (Redis基础教程之六)如何使用Redis中的List
    (Redis基础教程之九) 如何在Redis中使用Sorted Sets
    (Python基础教程之十九)Python优先级队列示例
    (Python基础教程之十八)Python字典交集–比较两个字典
    (Python基础教程之十七)Python OrderedDict –有序字典
    Heap_Sort
    Quick_Sort
    Merge_Sort
  • 原文地址:https://www.cnblogs.com/xuezhizhang/p/2136665.html
Copyright © 2011-2022 走看看