本文章介绍基于VS2010 Winform 的WPS2016二次开发 ET数据读取程序 本程序支持多个Sheet页面

前提:引用WPS安装目录下的etapi.dll

private void button2_Click(object sender, EventArgs e)
{
//初始化表头
List<string[]> columnTextsList = new List<string[]>();
string[] strColumnTexts1 = { "企业名称", "企业类型" };
string[] strColumnTexts2 = { "产品编码", "产品名称", "产品类别" };
columnTextsList.Add(strColumnTexts1);
columnTextsList.Add(strColumnTexts2);

OpenFileDialog fileDialog = new OpenFileDialog();
////(*.txt)|*.txt|
fileDialog.Filter = "(*.et)|*.et";
fileDialog.FilterIndex = 1;
fileDialog.RestoreDirectory = true;
if (fileDialog.ShowDialog() == DialogResult.OK)
{
List<ClinetUtil> clientList = new List<ClinetUtil>();
ExcelToDataSet(fileDialog.FileName, columnTextsList, new Action<string, DataSet>(delegate(string msg, DataSet ds)
{
if (ds != null && ds.Tables.Count > 0)
{
dgv1.DataSource = ds.Tables[0];
if (ds.Tables.Count > 1)
{
dgv2.DataSource = ds.Tables[1];
}
}
else
{
MessageBox.Show(msg);
}
}));
}
}

/// <summary>
/// 读取et表格数据转换成dataSet
/// </summary>
/// <param name="fileName">et表格全路径</param>
/// <param name="columnTextsList">规定的表头列表(支持多sheet)</param>
/// <param name="callback">回调函数</param>
private void ExcelToDataSet(string fileName, List<string[]> columnTextsList, System.Action<string, DataSet> callback)
{
/*
说明:
* 1.Excel读取的顺位从1开始,而不是从0开始
* 2.Excel.Application 当系统中同时安装Excel和et 时则启动Excel.exe ;若只存在et 时,则启动et.exe
*
*/
string msg = "";
List<string> headerList = new List<string>();
DataSet dataSet = new DataSet();

Excel.Application appli = new Excel.Application();
try
{
//读取Excel
Excel._Workbook wk = appli.Workbooks.Open(fileName);
//读取sheet
int sheetsCount = wk.Worksheets.Count;//获取sheet数量
if (sheetsCount <= 0)
{
appli.Workbooks.Close();
appli.Quit();
callback(msg, dataSet);
}

if (columnTextsList.Count > sheetsCount)
{
msg = string.Format("导入表格的sheet数量不符合要求!");
appli.Workbooks.Close();
appli.Quit();
callback(msg, dataSet);
return;
}

//遍历每一个sheet页面
for (int k = 1; k <= sheetsCount; k++)
{
//如果sheet页面的数量大于规定的数量 跳出方法
if (k > columnTextsList.Count) break;

DataTable dt = new DataTable();
Excel.Worksheet sheet = wk.Worksheets.get_Item(k);
Excel.Range range = sheet.UsedRange;

int rowCount = range.Rows.Count;//获取行数
int columCount = range.Columns.Count;//获取列数

//设置列头
for (int j = 1; j <= columCount; j++)
{
dt.Columns.Add(((Excel.Range)range.get_Item(1, j)).Text);
}

//验证Excel中的列是否缺失
for (int i = 0; i < columnTextsList[k - 1].Length; i++)
{
if (!dt.Columns.Contains(columnTextsList[k - 1][i]))
{
msg = string.Format("要导入的文件第\"{0}\"个sheet页面缺少\"{1}\"列,请使用正确的模板!", k, columnTextsList[k - 1][i].Trim());
appli.Workbooks.Close();
appli.Quit();
callback(msg, dataSet);
return;
}
}

for (int i = 2; i <= rowCount; i++)
{
DataRow datarow = dt.NewRow();
for (int j = 1; j <= columCount; j++)
{
string title = ((Excel.Range)range.get_Item(j)).Text;
datarow[title] = range.get_Item(i, j).Text;
}
dt.Rows.Add(datarow);
}
dataSet.Tables.Add(dt);
}

//关闭相关程序
appli.Workbooks.Close();
appli.Quit();
callback(msg, dataSet);
}
catch (Exception ex)
{
appli.Workbooks.Close();
appli.Quit();
callback(msg, dataSet);
return;
}
}

C# 导入(读取) WPS ET文件的更多相关文章

  1. R—读取数据(导入csv,txt,excel文件)

    导入CSV.TXT文件 read.table函数:read.table函数以数据框的格式读入数据,所以适合读取混合模式的数据,但是要求每列的数据数据类型相同. read.table读取数据非常方便,通 ...

  2. 使用js-xlsx库,前端读取Excel报表文件

    在实际开发中,经常会遇到导入Excel文件的需求,有的产品人想法更多,想要在前端直接判断文件内容格式是否正确,必填项是否已填写 依据HTML5的FileReader,可以使用新的API打开本地文件(参 ...

  3. 前端读取Excel报表文件

    在实际开发中,经常会遇到导入Excel文件的需求,有的产品人想法更多,想要在前端直接判断文件内容格式是否正确,必填项是否已填写 依据HTML5的FileReader,可以使用新的API打开本地文件(参 ...

  4. matlab中读取txt数据文件(txt文本文档)

    matlab中读取txt数据文件(txt文本文档) 根据txt文档不同种类介绍不同的读取数据方法 一.纯数据文件(没有字母和中文,纯数字) 对于这种txt文档,从matalb中读取就简单多了 例如te ...

  5. 根据NPOI 读取一个excel 文件的多个Sheet

    大家都知道NPOI组件可以再你本地没有安装office的情况下来 读取,创建excel文件.但是大家一般都是只默认读取一个excel文件的第一个sheet.那么如果要读取一个excel 的所有shee ...

  6. JavaScript进阶(六)用JavaScript读取和保存文件

    用JavaScript读取和保存文件 因为Google还不提供同步插件数据的功能,所以导入和导出插件配置就必须和文件打交道了.而出于安全原因,只有IE才提供访问文件的API:但随着HTML 5的到来, ...

  7. 利用Python读取外部数据文件

      不论是数据分析,数据可视化,还是数据挖掘,一切的一切全都是以数据作为最基础的元素.利用Python进行数据分析,同样最重要的一步就是如何将数据导入到Python中,然后才可以实现后面的数据分析.数 ...

  8. IoC COntainer Create Javabeans 可以通过读取beans.xml 文件来创建一个应用程序上下文对象 依赖反转

    Spring初学快速入门 - Spring教程™ https://www.yiibai.com/spring/spring-tutorial-for-beginners.html# pom <? ...

  9. SPSS学习系列之SPSS Statistics导入读取数据(多种格式)(图文详解)

    不多说,直接上干货! SPSS Statistics导入读取数据的步骤: 文件  ->  导入数据 成功! 欢迎大家,加入我的微信公众号:大数据躺过的坑     免费给分享       同时,大 ...

  10. jmeter读取本地CSV文件

    用jmeter录制考试上传成绩等脚本时,出现的问题及解决方法如下: 1.beanshell前置处理器,不能读取本地csv文件里的数据: 方法一: 在beanshell里不能直接从本地的csv文件里读取 ...

随机推荐

  1. SQLSERVER无排序生成序号

    实现方式:ROW_NUMBER() SELECT RowID=(ROW_NUMBER() OVER(ORDER BY(SELECT ))) FROM dbo.tbl_name 实现方式:IDENTIT ...

  2. 极限编程核心价值:简单(Simplicity)

    写在前面 在编写 ASP.NET Core 项目时,深感项目设计的无力感,在软件设计方面我还有很长的路要走.我一直以来都把代码当作一种艺术的存在,认为自己是个"艺术家",其实就是个 ...

  3. PyQt5--QLineEdit

    # -*- coding:utf-8 -*- ''' Created on Sep 20, 2018 @author: SaShuangYiBing Comment: ''' import sys f ...

  4. 请问下.net俱乐部这个组织现在还存在么?

    各位好,我是北京的一名.net开发人员,一直在想有什么线下技术活动可以开拓自己的视野,扩展人脉,我知道曾经有一个.net俱乐部很活跃 可是现在我在百度上搜了下.net俱乐部的信息,已经基本找不到201 ...

  5. BZOJ1005:[HNOI2008]明明的烦恼(组合数学,Prufer)

    Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? Input 第一行为N ...

  6. ES6简介之let和const命令解说

    一.var申明变量 学习过JavaScript的同学都应该知道,ES5中申明变量使用var,ES5中的var可以说是无所不能的,所有类型的变量都是由var来申明,但往往很多使用者不知道var申明的变量 ...

  7. luogu P3690 【模板】Link Cut Tree (动态树)

    嘟嘟嘟 LCT竟然看了整整一天,但好歹是看懂了. 教程这里不写,强烈推荐 闪狐大佬的博客 . 但是还是有几句想说的. 1.尽管LCT和splay很像,但是有一些细节还是不一样的.首先是rotate,我 ...

  8. 利用单例模式设计数据库连接Model类

    之前在<[php]利用php的构造函数与析构函数编写Mysql数据库查询类>(点击打开链接)写过的Mysql数据库查询类还不够完美,利用<[Java]单例模式>(点击打开链接) ...

  9. Lr场景设计-hc课堂笔记

    性能测试最基本也是最难的部分:场景设计.瓶颈分析和定位 10个业务10个脚本,每个脚本单独执行:单独场景.10个脚本一起执行:混合场景.10个业务1个脚本:可以设计不同用户登录,分别做不同的操作等场景 ...

  10. 分享四个 Linux 上的网络信息嗅探工具

    在计算机网络中,数据是暴露的,因为数据包传输是无法隐藏的,所以让我们来使用 whois.dig.nmcli和 nmap 这四个工具来嗅探网络吧. 请注意,不要在不属于自己的网络上运行 nmap ,因为 ...