using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.Configuration;
using System.Net;
using NPOI.SS.Formula.Functions;
using System.Runtime.Remoting.Messaging;
using System.Runtime.CompilerServices; namespace NPOI
{
public partial class Form1 : Form
{
public static string connectionString = "charset='utf8';pooling=true;Data Source='" + ConfigurationManager.AppSettings["Conn_server"] + "';"
+ "Database='" + ConfigurationManager.AppSettings["Conn_database"] + "';"
+ "User Id='" + ConfigurationManager.AppSettings["Conn_uid"] + "';"
+ "Password='" + ConfigurationManager.AppSettings["Conn_pwd"] + "';"; public Form1()
{
InitializeComponent();
} public static DataTable fsQuery(string strSQL)
{
return GetDataSet(CommandType.Text, strSQL, null).Tables[0];
}
private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, MySqlParameter[] cmdParms)
{ if (conn.State != ConnectionState.Open) conn.Open(); cmd.Connection = conn; cmd.CommandText = cmdText; if (trans != null) cmd.Transaction = trans; cmd.CommandType = cmdType; if (cmdParms != null)
{ foreach (MySqlParameter parm in cmdParms) cmd.Parameters.Add(parm); }
} public static DataSet GetDataSet(CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) { //创建一个MySqlCommand对象 MySqlCommand cmd = new MySqlCommand(); //创建一个MySqlConnection对象 MySqlConnection conn = new MySqlConnection(connectionString); try
{ //调用 PrepareCommand 方法,对 MySqlCommand 对象设置参数 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); //调用 MySqlCommand 的 ExecuteReader 方法 MySqlDataAdapter adapter = new MySqlDataAdapter(); adapter.SelectCommand = cmd; DataSet ds = new DataSet(); adapter.Fill(ds); //清除参数 cmd.Parameters.Clear(); conn.Close(); return ds; } catch (Exception e) { throw e; }
} public bool Add()
{ return true; } private void button1_Click(object sender, EventArgs e)
{ DateTime dtStart;
DateTime dtEnd; dtStart = DateTime.Now;
//创建一个工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
//创建一个sheet
ISheet sheet1 = workbook.CreateSheet("sheet1");
// 设置列宽,excel列宽每个像素是1/256
sheet1.SetColumnWidth(0, 18 * 256);
sheet1.SetColumnWidth(1, 18 * 256);
sheet1.SetColumnWidth(2, 18 * 256);
sheet1.SetColumnWidth(3, 18 * 256);
sheet1.SetColumnWidth(4, 18 * 256);
IRow rowHeader = sheet1.CreateRow(0);//创建表头行
rowHeader.CreateCell(0, CellType.String).SetCellValue("id");
rowHeader.CreateCell(1, CellType.String).SetCellValue("站");
rowHeader.CreateCell(2, CellType.String).SetCellValue("点位");
rowHeader.CreateCell(3, CellType.String).SetCellValue("时间");
rowHeader.CreateCell(4, CellType.String).SetCellValue("图片");
DataTable dt = fsQuery("SELECT * from USER limit 50");
if (dt.Rows.Count > 0)
{
int rowline = 1;//从第二行开始(索引从0开始)
foreach (DataRow datarow in dt.Rows)
{
IRow row = sheet1.CreateRow(rowline);
//设置行高 ,excel行高度每个像素点是1/20
row.Height = 80 * 20;
//填入生产单号
row.CreateCell(0, CellType.String).SetCellValue(datarow["id"].ToString());
row.CreateCell(1, CellType.String).SetCellValue(datarow["USER_NAME"].ToString());
row.CreateCell(2, CellType.String).SetCellValue(datarow["USER_CODE"].ToString());
row.CreateCell(3, CellType.String).SetCellValue(datarow["PHONE"].ToString()); ICell cell = row.CreateCell(8);
cell.SetCellValue("链接");
HSSFHyperlink link = new HSSFHyperlink(HyperlinkType.Url);
link.Address = "http://vfx.mtime.cn/Video/2019/03/12/mp4/190312143927981075.mp4";
cell.Hyperlink = link; byte[] bytes = GetFileData_Remote("http://192.168.10.2:8202/filelib/2022-03/05/d3215a0afdd44d9ab94313f0379e2ebf.jpg"); //byte[] bytes = System.IO.File.ReadAllBytes(datarow["picture"].ToString());
int pictureIdx = workbook.AddPicture(bytes, PictureType.JPEG); HSSFPatriarch patriarch = (HSSFPatriarch)sheet1.CreateDrawingPatriarch();
// 插图片的位置 HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2) 后面再作解释
HSSFClientAnchor anchor = new HSSFClientAnchor(70, 10, 0, 0, 4, rowline, 5, rowline + 1);
//把图片插到相应的位置
HSSFPicture pict = (HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx); rowline++;
}
}
//把文件保存到d:\aaa.xls,注意扩展名是.xls不要写成.xlsx
using (Stream stream = File.OpenWrite(Application.StartupPath + "//报表.xls"))
{
workbook.Write(stream);
}
//如果要操作.xlsx的excel,引入命名空间 using NPOI.XSSF.UserModel;
// 然后把所有的HSS改为XSS(比喻HSSWorkbook->XSSWorkbook)
dtEnd = DateTime.Now;
this.Text = "总共用时"+(dtEnd - dtStart).TotalSeconds.ToString("0.00")+"秒";
} protected byte[] GetFileData_local(string fileUrl)
{
FileStream fs = new FileStream(fileUrl, FileMode.Open, FileAccess.Read);
try
{
byte[] buffur = new byte[fs.Length];
fs.Read(buffur, 0, (int)fs.Length); return buffur;
}
catch (Exception ex)
{
//MessageBoxHelper.ShowPrompt(ex.Message);
return null;
}
finally
{
if (fs != null)
{ //关闭资源
fs.Close();
}
}
} private static byte[] GetFileData_Remote(string serverUrl)
{
string url = serverUrl;
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream();
byte[] byteFile = null;
List<byte> bytes = new List<byte>();
int temp = stream.ReadByte();
while (temp != -1)
{
bytes.Add((byte)temp);
temp = stream.ReadByte();
}
byteFile = bytes.ToArray();
string str = Convert.ToBase64String(byteFile);
response.Close();
return byteFile;
}
}
}

  生成按钮就是button1,另外包含了访问mysql的基本方法,再附赠两个转换文件为字节数组的方法,一个是转换本地路径,如d:\aaa\x1.jpg 另一个是转换远程路径,如http://x/1.jpg

NPOI在EXCEL中插入图片和超链接的更多相关文章

  1. 使用Npoi向Excel中插入图片

    先把数据库中的数据都导入到Excel表格中,把图片地址的路径全部转成绝对路径. 使用Npoi读取刚导出的Excle表格,把图片那个单元格的图片路径读出来,然后用文件流读取图片,然后通过Npoi把图片放 ...

  2. java POI实现向Excel中插入图片

          做Web开发免不了要与Excel打交道.今天老大给我一个任务-导出Excel.开始想的还是蛮简单的,无非就是查找,构建Excel,response下载即可.但是有一点不同,就是要加入图片, ...

  3. java 在Excel中插入图片 POI实现

    一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97- ...

  4. c# 应用NPOI 获取Excel中的图片,保存至本地的算法

    要求:读取excel中的图片,保存到指定路径 思路:  利用NPOI中 GetAllPictures()方法获取图片信息 步骤: 1.新建一个Windows窗体应用程序 2.桌面新建一个excel,贴 ...

  5. NPOI(2.1.3)向excel中插入图片,xls文档图片插入成功,xlsx文档图片插入失败

    众所周知,NPOI对xls和xlsx两个版本的excel文档的操作并没有一个统一的支持, 程序若想兼容这两个版本的操作,必须根据excel版本分别去调用HSSF和XSSF这两套操作库, 之前一直不明白 ...

  6. 使用NPOI从Excel中提取图片及图片位置信息

    问题背景: 话说,在ExcelReport的开发过程中,有一个比较棘手的问题:怎么复制图片呢? 当然,解决这个问题的第一步是:能使用NPOI提取到图片及图片的位置信息.到这里,一切想法都很顺利.但NP ...

  7. 如何在excel单元格中插入图片批注

    在excel单元格中插入图片批注的方法: 1.选定要插入图片的单元格,然后右键选择插入批注. 2.然后会插入一个批注框,为了不影响图片效果,可以将批注文字都删除.然后鼠标移动到批注框边角再右键. 3. ...

  8. NX二次开发-OLE/COM向EXCEL表格中插入图片

    今晚有一个兄弟问我怎么往EXCEL里插入图片(加工程序单中需要插入图片),这个我之前也没弄过,回复了他一句不知道,后来刚刚干完游戏吃完鸡,就去VC++的书上翻了翻,还真的被我翻到了.VC++的方法往E ...

  9. Open Xml 读取Excel中的图片

      在我的一个项目中,需要分析客户提供的Excel, 读出其中的图片信息(显示在Excel的第几行,第几列,以及图片本身). 网络上有许多使用Open Xml插入图片到Word,Excel的文章, 但 ...

  10. 在Altium_Designer_PCB_中插入图片的方法

    详细请看PDF: http://files.cnblogs.com/files/BinB-W/在Altium_Designer_PCB_中插入图片的方法.pdf 配套文件: http://files. ...

随机推荐

  1. Blazor前后端框架Known-V1.2.1

    V1.2.1 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行. 概述 基于C#和Blazor实现的快速开发框架,前后端分离,开箱即用. 跨平台,单 ...

  2. [随笔]记一此更新win10后mysql服务消失的问题

    十几天前系统自动更新 没在意 几天前用php连mysql的时候 报错 Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] 由于目标计算 ...

  3. 解读XML - Foreach循环

    <foreach item="item" index="index" collection="supplyIdAry" open=&q ...

  4. Unity的IActiveBuildTargetChanged:深入解析与实用案例

    Unity IActiveBuildTargetChanged Unity IActiveBuildTargetChanged是Unity引擎中的一个非常有用的功能,它可以让开发者在切换构建平台时自定 ...

  5. UI自动化 --- UI Automation 基础详解

    引言 上一篇文章UI自动化 --- 微软UI Automation中,介绍了UI Automation能够做什么,且借助 Inspect.exe 工具完成了一个模拟点击操作的Demo,文章结尾也提出了 ...

  6. 4.7 x64dbg 应用层的钩子扫描

    所谓的应用层钩子(Application-level hooks)是一种编程技术,它允许应用程序通过在特定事件发生时执行特定代码来自定义或扩展其行为.这些事件可以是用户交互,系统事件,或者其他应用程序 ...

  7. html实现原生table并设置表格边框的两种方式

    虽然第三方表格插件多不胜数,但是很多场景还是需要用到原生<table>,掌握html原生table的实现方法,是前端开发的必备技能.例如:print-js打印.html2canvas生成图 ...

  8. java使用SFTP连接服务器下载,上传文件

    package mocha.framework.util; /* * @author Xiehj * @version 2019年10月28日 上午9:37:28 */ import java.io. ...

  9. PostgreSQL 10 文档: PostgreSQL 服务器程序

    PostgreSQL 服务器应用 这一部分包含PostgreSQL服务器应用和支持工具的参考信息.这些命令只在数据库服务器所在的主机上运行才有用.其他工具程序在PostgreSQL 客户端应用中列出. ...

  10. PostgreSQL 10 文档: 系统表

    第 51 章 系统目录 目录 51.1. 概述 51.2. pg_aggregate 51.3. pg_am 51.4. pg_amop 51.5. pg_amproc 51.6. pg_attrde ...