C#操作excel(读取excel里的图片并show在页面上)

在操作excel的时候,除了制作chart之外,很多时候还要读取excel里的图片到数据库里。下面简单介绍下从excel里抓图片到db,并从db里捞出来。
  1 using System;
  2  using System.Collections.Generic;
  3  using System.Linq;
  4  using System.Text;
  5  using System.Data.SqlClient;
  6  using System.Data;
  7 using Microsoft.Office.Interop.Excel;
  8 using System.Configuration;
  9 using System.Windows.Forms;
10 using System.Drawing;
11 using System.IO;
12 namespace a_stock
13 {
14     class ExcelWithPicture
15     {
16         //excel里有图片的路径
17         public static readonly string path = "C:\\GDS\\NBQAA Mockup DFM Report(1126).xls";
18         //数据库连接字符串
19         public static readonly string conStr = ConfigurationSettings.AppSettings["strConn"].ToString();
20         public static void Read_excel_withpicture()
21         {
22             Microsoft.Office.Interop.Excel.Application MyExcel = new Microsoft.Office.Interop.Excel.Application();
23             //打开excel
24             MyExcel.Workbooks.Open(path, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
25             Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
26             Microsoft.Office.Interop.Excel.Workbook It_book = null;
27             Microsoft.Office.Interop.Excel.Worksheet It_sheet = null;
28             Microsoft.Office.Interop.Excel.Range It_rang = null;
29             MyExcel.DisplayAlerts = false;
30             It_book = MyExcel.Workbooks[1];
31             //获取sheet表
32             It_sheet = (Worksheet)It_book.Worksheets[1];
33             //initial the data
34             int Priority = -9999, Fsize = 0;
35             string Initial_date = "", DFX_number = "", Special_Issue = "", Issue_location = "", Suggestion_DFX = "", NPR = "", Category = "", Owner = "", status = "";
36             byte[] Special_Picture={};
37             It_rang = It_sheet.get_Range("E11", "G11");
38             It_rang.Select();
39             //拷贝单元格的图片,记住get_Range所选取的矩阵范围一定要比图片所占据单元格的范围大,否则只会显示一部分
40              It_rang.CopyPicture(XlPictureAppearance.xlScreen,XlCopyPictureFormat.xlBitmap);
41             if (Clipboard.ContainsImage())
42             {
43                 MemoryStream imagestream=new MemoryStream();
44                Clipboard.GetImage().Save(imagestream,System.Drawing.Imaging.ImageFormat.Jpeg);
45                //int length = (int)imagestream.Length;
46                Fsize = (int)imagestream.Length;
47                 //图片字节流
48                 Special_Picture=imagestream.ToArray();
49                 //imagestream.Read(Special_Picture,0,length);
50             }
51                    //取得其他单元格相应的值
52             Priority =Convert.ToInt32( It_sheet.get_Range("B11",Type.Missing).Text.ToString());
53             Initial_date = It_sheet.get_Range("C11",Type.Missing).Text.ToString();
54             DFX_number = It_sheet.get_Range("D11", Type.Missing).Text.ToString();
55             Special_Issue = It_sheet.get_Range("E11", Type.Missing).Text.ToString();
56             Issue_location = It_sheet.get_Range("H11", Type.Missing).Text.ToString();
57             Suggestion_DFX = It_sheet.get_Range("I11", Type.Missing).Text.ToString();
58             NPR = It_sheet.get_Range("O10", Type.Missing).Formula.ToString();
59             Category = It_sheet.get_Range("Q11", Type.Missing).Text.ToString();
60             Owner = It_sheet.get_Range("R11", Type.Missing).Text.ToString();
61             status = It_sheet.get_Range("S11", Type.Missing).Text.ToString();
62
63             //把图片相关信息录入数据库的存储过程
64             excute_insert(conStr,Priority,Initial_date,DFX_number,Special_Issue,Special_Picture,Issue_location,Suggestion_DFX,NPR,Category,Owner,status,Fsize);
65
66
67             MyExcel.Quit();
68             System.Runtime.InteropServices.Marshal.ReleaseComObject(MyExcel);
69             MyExcel = null;
70             It_book = null;
71             It_sheet = null;
72
73         
74         }
75         public static void excute_insert(string con, int Priority, string Initial_date, string DFX_number, string Special_Issue, byte[] Special_Picture, string Issue_location, string Suggestion_DFX, string NPR, string Category, string Owner, string status, int Fsize)
76         {
77             SqlConnection con_ = new SqlConnection(con);
78             SqlCommand cmd = new SqlCommand("Insert_ExcelWithPicture", con_);
79             cmd.CommandType = CommandType.StoredProcedure;
80             cmd.CommandTimeout = 0;
81
82             cmd.Parameters.Add("@Priority", SqlDbType.Int);
83             cmd.Parameters.Add("@Initial_date", SqlDbType.NVarChar);
84             cmd.Parameters.Add("@DFX_number", SqlDbType.NVarChar);
85             cmd.Parameters.Add("@Special_Issue", SqlDbType.NVarChar);
86             cmd.Parameters.Add("@Special_Picture", SqlDbType.Image);
87             cmd.Parameters.Add("@Issue_location", SqlDbType.NVarChar);
88             cmd.Parameters.Add("@Suggestion_DFX", SqlDbType.NVarChar);
89             cmd.Parameters.Add("@NPR", SqlDbType.NVarChar);
90             cmd.Parameters.Add("@Category", SqlDbType.NVarChar);
91             cmd.Parameters.Add("@Owner", SqlDbType.NVarChar);
92             cmd.Parameters.Add("@status", SqlDbType.NVarChar);
93             cmd.Parameters.Add("@Fsize", SqlDbType.Int);
94           
95             cmd.Parameters["@Priority"].Value =Priority;
96             cmd.Parameters["@Initial_date"].Value =Initial_date;
97             cmd.Parameters["@DFX_number"].Value = DFX_number;
98             cmd.Parameters["@Special_Issue"].Value = Special_Issue;
99             cmd.Parameters["@Special_Picture"].Value = Special_Picture;
100             cmd.Parameters["@Issue_location"].Value = Issue_location;
101             cmd.Parameters["@Suggestion_DFX"].Value = Suggestion_DFX;
102             cmd.Parameters["@NPR"].Value = NPR;
103             cmd.Parameters["@Category"].Value = Category;
104             cmd.Parameters["@Owner"].Value = Owner;
105             cmd.Parameters["@status"].Value = status;
106             cmd.Parameters["@Fsize"].Value = Fsize;
107
108             con_.Open();
109             cmd.ExecuteNonQuery();
110             con_.Close();
111         }
112     }
113 }
114

从db里面抓出来show在web上:

1 using System;
2 using System.Collections;
3 using System.Configuration;
4 using System.Data;
5 using System.Linq;
6 using System.Web;
7 using System.Web.Security;
8 using System.Web.UI;
9 using System.Web.UI.HtmlControls;
10 using System.Web.UI.WebControls;
11 using System.Web.UI.WebControls.WebParts;
12 using System.Xml.Linq;
13 using System.Data.SqlClient;
14 using System.IO;
15 public partial class Get_picture : System.Web.UI.Page
16 {
17     //string strConn = ConfigurationManager.AppSettings["strConn"];
18     public static readonly string strConn = ConfigurationManager.AppSettings["strConn1"];
19
20     protected void Page_Load(object sender, EventArgs e)
21     {
22         SqlConnection conn = new SqlConnection();
23         conn.ConnectionString =strConn;
24         conn.Open();
25         string sql = "select * from [Get_ExcelWithPicture] where ID=7"; //这里id使用的是1,实际可以根据需要传一个值
26         SqlCommand cmd = new SqlCommand(sql, conn);
27         cmd.CommandTimeout =0;
28         SqlDataReader dr = cmd.ExecuteReader();
29
30         //if (dr.Read())
31         //{
32         //    byte[] imgdata = (byte[])dr["Special_Picture"];
33         //    Response.BinaryWrite(imgdata);
34         //    dr.Close();
35         //    conn.Close();
36         //    Response.End();
37         //}
38
39         if (dr.Read())
40         {
41             //Response.ContentType =  dr["ID"].ToString().Trim();
42             Response.Clear();
43             //输出图片文件二进制数据流
44             Response.OutputStream.Write((byte[])dr["Special_Picture"], 0, 1+(int)dr["Fsize"]);
45             Response.End();
46         }
47
48     }
49 }
原文地址:https://www.cnblogs.com/angels/p/2101381.html