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. 根据模板动态生成word(一)使用freemarker生成word

    @ 目录 一.准备模板 1.创建模板文件 2.处理模板 2.1 处理普通文本 2.2 处理表格 2.3 处理图片 二.项目代码 1.引入依赖 2.生成代码 三.验证生成word 一.准备模板 1.创建 ...

  2. P5752 [NOI1999] 棋盘分割题解

    本文来自我的洛谷博客. 这个题解思路虽然与其他人的思路相同, 但力求使用清晰易懂的图片和文字,讲解最简洁的道理. 请大家耐心地看完,注意要结合图片一起哦~~ 2022-8-24 更改了格式与错别字. ...

  3. TrustZone——(一)

    本文内容主要来源于网络,综合了网上的多篇文章,也加入了一些自己的理解,重新组织了文章结构使其便于理解. 主要参考的文章包括: 一篇了解TrustZone TrustZone领域先行者 TrustZon ...

  4. MAUI Blazor 显示本地图片的新思路

    前言 好久没写文章了,水一篇 关于MAUI Blazor 显示本地图片这个问题,有大佬发过了. 就是 token 大佬的那篇 Blazor Hybrid (Blazor混合开发)更好的读取本地图片 主 ...

  5. 【WebGL系列-02】创建program上下文

    WebGL程序program对象的创建 program对象由顶点着色器对象和片元着色器对象构成,因此,创建program对象包含了两部分,一个是着色器对象的创建,一个是program对象的创建. 总体 ...

  6. Sa-Token 多账号认证:同时为系统的 Admin 账号和 User 账号提供鉴权操作

    Sa-Token 是一个轻量级 java 权限认证框架,主要解决登录认证.权限认证.单点登录.OAuth2.微服务网关鉴权 等一系列权限相关问题. Gitee 开源地址:https://gitee.c ...

  7. .NET周刊【7月第4期 2023-07-23】

    国内文章 你知道.NET的字符串在内存中是如何存储的吗? https://www.cnblogs.com/artech/p/string-memory-layout.html 毫无疑问,字符串是我们使 ...

  8. ch-manager.sh

    [root@dev-clickhouse1 ~]# cat ch-manager.sh #!/bin/bash ch_arr=(ch1-shard1-main ch1-shard2-sub ch2-s ...

  9. Django: request.query_params取值

    取值 request.query_params.dict(),将querydict对象转换为字典 参考链接 https://www.jianshu.com/p/f2f73c426623 https:/ ...

  10. [pandas]从多个文件中构建dataframe

    按列从多个文件中构建 假设有两个csv文件,列不相同,需要整合为一个dataframe,使用glob模块: from glob import glob import pandas as pd # gl ...