1、NuGet直接安装NPOI程序包;

2、

using NPOI.XSSF.UserModel;

3、导出Excel代码:

        private void TsbExport2ExcelClick(object sender, EventArgs e)
{
//获取qrkey
ToolStripButton tsbFiterBy = ((ToolStripButton)sender);
long qryRKEY = Convert.ToInt64(tsbFiterBy.Name.Replace("TsbExport2Excel", string.Empty));
QARRect qr = QryAndRptList.Find(q => q.QryRKEY == qryRKEY);
if (qr == null)
{
MyMsg.Warning("没有找到查询定义条目,请关闭本窗体重试.");
return;
} A12DataGridView dgvAutoMain = (A12DataGridView)Controls.Find("DGVAutoMain" + qryRKEY, true)[];
if (dgvAutoMain == null) return;
if (dgvAutoMain.Rows.Count <= )
{
MyMsg.Information("没有需要导出的数据,请检查.");
return;
}
TabPage tabPage= (TabPage)Controls.Find("QryTpg" + qryRKEY, true)[];
string tagSheetName = tabPage.Text;
string saveFileName = tabPage.Text + DateTime.Now.ToString("yyyy-MM-dd"); var saveFileDialoge = new SaveFileDialog
{
FileName = saveFileName,
Filter = "Excel Documents|*.xls;*.xlsx;*.xlsm",
DefaultExt = ".xlsx"
};
if (saveFileDialoge.ShowDialog() != DialogResult.OK)
{
return;
}
else
{
saveFileName = saveFileDialoge.FileName;
if (string.IsNullOrEmpty(saveFileName))
{
return;
}
}
if (File.Exists(saveFileName))
{
File.Delete(saveFileName);//因为在选取文件名称时就有提示是否覆盖,此处直接删除
}
//创建或匹配一个BackgroundWorker,初始化一个耗时任务
BackgroundWorker bgwk = new BackgroundWorker();
BgwkDef bgwkDef = new BgwkDef()
{
RunningAction = delegate () { Export2Excel(bgwk,dgvAutoMain, saveFileName, tagSheetName); },
TagBgwk = bgwk
};
BeginBgwork(bgwkDef);
}

导出按钮代码

        private void Export2Excel(BackgroundWorker bgwk, A12DataGridView tagDGV, string fullSaveFileName, string tagSheetName)
{
if (string.IsNullOrEmpty(fullSaveFileName)) return;
try
{
bgwk.ReportProgress(, "正在准备文档...");
NPOI.SS.UserModel.IWorkbook tagWorkbook = new XSSFWorkbook();
NPOI.SS.UserModel.ISheet tagSheet = tagWorkbook.CreateSheet(tagSheetName);//创建一个Sheet #region 标题行
//创建标题行
NPOI.SS.UserModel.IRow rowH = tagSheet.CreateRow();
//创建单元格样式
NPOI.SS.UserModel.ICellStyle cellStyle = tagWorkbook.CreateCellStyle();
//创建格式
NPOI.SS.UserModel.IDataFormat dataFormat = tagWorkbook.CreateDataFormat(); //设置为文本格式,也可以为 text,即 dataFormat.GetFormat("text");
cellStyle.DataFormat = dataFormat.GetFormat("@");
cellStyle.FillForegroundColor = NPOI.SS.UserModel.IndexedColors.Yellow.Index;
cellStyle.FillPattern = NPOI.SS.UserModel.FillPattern.SolidForeground;
cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
cellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Hair;
cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Hair;
cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Hair;
cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Hair;
//设置列名
foreach (DataGridViewColumn col in tagDGV.Columns)
{
//创建单元格并设置单元格内容
rowH.CreateCell(col.Index).SetCellValue(col.HeaderText);
rowH.Height = * ; //设置单元格格式,宽度与Datagridview列宽匹配
rowH.Cells[col.Index].CellStyle = cellStyle;
tagSheet.SetColumnWidth(col.Index, OString.NZ2Int(col.Width / 7.5 * ));
}
tagSheet.CreateFreezePane(, , , );
#endregion bgwk.ReportProgress(, "正在准备数据...");
DataTable DTTmp = OData.GetDTFromObject(tagDGV.DataSource).Copy(); bgwk.ReportProgress(, "正在写入数据到档案中...");
//写入数据
//创建一个单元格
NPOI.SS.UserModel.ICell cell = null;
int totColCount = DTTmp.Columns.Count;
int totRowCount = DTTmp.Rows.Count;
for (int i = ; i < totRowCount; i++)
{
//跳过第一行,第一行为列名
NPOI.SS.UserModel.IRow row = tagSheet.CreateRow(i + );
row.Height = * ;
for (int j = ; j < totColCount; j++)
{
cell = row.CreateCell(j);
#region 根据列类型写入值
Type clmDataType = DTTmp.Columns[j].DataType;
if ((clmDataType == typeof(char)) || (clmDataType == typeof(Guid))|| (clmDataType == typeof(string)))
{
cell.SetCellValue(OString.NZ2Str(DTTmp.Rows[i][j]));
}
else if(clmDataType == typeof(bool))
{
cell.SetCellValue(OString.NZ2Bool(DTTmp.Rows[i][j]));
}
else if ((clmDataType == typeof(byte)) || (clmDataType == typeof(decimal)) || (clmDataType == typeof(double)) || (clmDataType == typeof(short)) || (clmDataType == typeof(int)) || (clmDataType == typeof(long)) || (clmDataType == typeof(sbyte)) || (clmDataType == typeof(float)) || (clmDataType == typeof(TimeSpan)) || (clmDataType == typeof(ushort)) || (clmDataType == typeof(uint)) || (clmDataType == typeof(ulong)))
{
cell.SetCellValue(OString.NZ2Double(DTTmp.Rows[i][j]));
}
else if(clmDataType == typeof(DateTime))
{
cell.SetCellValue(Convert.ToDateTime(OString.NZ2DateTime(DTTmp.Rows[i][j])));
//创建单元格样式
NPOI.SS.UserModel.ICellStyle cellStyleValues = tagWorkbook.CreateCellStyle();
//创建格式
NPOI.SS.UserModel.IDataFormat dataFormatValues = tagWorkbook.CreateDataFormat();
if (cell.NumericCellValue.ToString().IndexOf('.') == -)
{
cellStyleValues.DataFormat = dataFormatValues.GetFormat("yyyy-mm-dd");
}
else
{
cellStyleValues.DataFormat = dataFormatValues.GetFormat("yyyy-mm-dd hh:mm:ss");
}
//设置单元格格式
cell.CellStyle = cellStyleValues;
}
else
{
cell.SetCellValue(OString.NZ2Str(DTTmp.Rows[i][j]));
}
#endregion
}
} bgwk.ReportProgress(, "正在保存档案...");
tagWorkbook.Write(new FileStream(fullSaveFileName, FileMode.Create, FileAccess.ReadWrite)); bgwk.ReportProgress(, "导出成功!");
return;
}
catch (Exception ex)
{
CancelBgwork(bgwk);
MyMsg.Exclamation("导出数据失败,请检查!",ex.Message);
return;
}
}

核心导出代码

这2段摘自框架的通用数据分析平台,其中采用了后台导出任务对话框,可以参考其它文章。

C# 未安装Office环境下使用NPOI导出Excel文件的更多相关文章

  1. 使用NPOI导出Excel文件

    使用NPOI导出Excel文件,本实例使用了ASP.NET MVC. 1.使用NPOI导出Excel文件 实例:导出商品列表. 要求:1.通过NPOI导出导出商品列表信息: 2.使用Excel函数计算 ...

  2. 基于Vue + axios + WebApi + NPOI导出Excel文件

    一.前言 项目中前端采用的Element UI 框架, 远程数据请求,使用的是axios,后端接口框架采用的asp.net webapi,数据导出成Excel采用NPOI组件.其业务场景,主要是列表页 ...

  3. 关于NPOI导出excel文件(xls和xlsx两种格式)提示格式不符的问题

    这两天在做导出excel文件的时候遇到这个问题 本来我导出的格式是xlsx格式的,但是下载得到的文件格式变成了xls, 一开始以为是返回的contenttype设置错了 return File(ms, ...

  4. 使用 NPOI 导出 Excel 文件

    [NPOI简介] NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者 ...

  5. C# DataGridview用NPOI导出Excel文件

    导出excel我用的是nuget 的NPOI,直接在项目中添加的,引用到项目中,下面是截图: 下面我把ExcelHelper贴出来 public static class ExcelHelper { ...

  6. asp.net Mvc 使用NPOI导出Excel文件

    1.新建MVC项目,新建控制器.视图 添加控制器: 添加视图(将使用布局页前面的复选框里的勾勾去掉) 2.在Models里新建一个类 public class Shop { /// <summa ...

  7. NPOI导出Excel文件,对单元格的一些设置

    HSSFWorkbook book = new HSSFWorkbook(); MemoryStream ms = new MemoryStream(); ISheet sheet = book.Cr ...

  8. NPOI在无Office环境下,对Office文件的操作

    在做项目的时候,经常会遇到对 Office的操作,但有时候会没有Office环境,因此给大家介绍一个思路,在没有Office环境下,对Office的处理. NPOI,顾名思义,就是POI的.NET版本 ...

  9. Linux环境下使用VSCode编译makefile文件的注意事项

    Linux环境下使用VSCode编译makefile文件的注意事项 首先安装C/C++的两个依赖 在debug,launch会自动的生成下方的launch.json launch.json { // ...

随机推荐

  1. OpenCV学习笔记 - Video Analysis - 录制视频

    录制视频 使用自带摄像头录制一段5s的短视频 error & solution fourcc1 = cv2.CV_FOURCC(', 'v') 在实践过程中,运行这一行时报错: 原因分析 在o ...

  2. eShopOnContainer 第一步

    运行结果截图: 操作流程: 1. git上clone 项目 windows版的docker并且安装成功,配置3核CPU,4G内存 vs 2017 (15.5)版本以上. 打开项目 eshopOnCon ...

  3. Docker简介及基本应用

    Docker 前言 1.虚拟化 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器.网络.内存及存储等,予以抽象.转换后呈现出来,打破实体结 ...

  4. classpath 和 classpath* 的区别:

    classpath指的是java代码生成的class的路径. classpath 和 classpath* 区别: classpath:只会到你的class路径中查找找文件; classpath*:不 ...

  5. 01b-1: 性能测度

  6. 单词的添加与查找 · Add and Search Word

    [抄题]: 设计一个包含下面两个操作的数据结构:addWord(word), search(word) addWord(word)会在数据结构中添加一个单词.而search(word)则支持普通的单词 ...

  7. Rotate image and fit show use canvas

    Description In the field of image processing, We always to show image after modified the image raw d ...

  8. [OS] 远程启动计划任务时以管理员身份运行

    在Jenkins建了一个task自动启动Selenium的Grid,命令行是这样写的: schtasks /end /tn RestartGrid /s SZTEST201606 /u szdomai ...

  9. Java操作HDFS代码样例

    代码在GitHub上. 包括如下几种样例代码: 新建文件夹 删除文件/文件夹 重命名文件/文件夹 查看指定路径下的所有文件 新建文件 读文件 写文件 下载文件至本地 上传本地文件 https://gi ...

  10. SLAM拾萃(2):doxygen

    今天给大家介绍一下doxygen.这个工具由来已久了,至少08年左右就已经在用了,但是目前还没见到好的介绍.我个人觉得这是个很简单易用的工具,但是为什么看了别人介绍反而觉得复杂了……所以趁着今天比较闲 ...