首页 > 编程语言 >C# NPOI 读取EXCEL数据后转化为DataTable

C# NPOI 读取EXCEL数据后转化为DataTable

时间:2024-04-05 13:45:26浏览次数:25  
标签:string C# EXCEL NPOI columnName workbook new columnNameCounts DataTable

XSSF是用于.xlsx(2007以后版本)

HSSF是用于.xls(2007以前版本)

//也可以根据后缀名自动切换IWorkbook
IWorkbook workbook;
if (fileExt == ".xlsx") { workbook = new XSSFWorkbook(fs); } else if (fileExt == ".xls" || fileExt == ".xlt") { workbook = new HSSFWorkbook(fs); } else { workbook = null; } if (workbook == null) { return null; }

 

static DataTable ReadExcelToDataTable(string filePath)
        {
            DataTable dataTable = new DataTable();

            // 读取Excel文件
            using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                HSSFWorkbook workbook = new HSSFWorkbook(file);
                ISheet sheet = workbook.GetSheetAt(0); // 获取第一个工作表

                // 获取列数
                int columnsCount = sheet.GetRow(0).LastCellNum;

                // 用于存储列名和对应的重复次数
                Dictionary<string, int> columnNameCounts = new Dictionary<string, int>();

                // 创建表头,处理重复的列名
                for (int i = 0; i < columnsCount; i++)
                {
                    object obj = GetValueType(sheet.GetRow(0).GetCell(i));
                    if (obj == null || obj.ToString() == string.Empty)
                    {
                        dataTable.Columns.Add(new DataColumn("Columns" + i.ToString()));
                    }
                    else
                    {
                        //string columnName = sheet.GetRow(0).GetCell(i).StringCellValue;
                        string columnName = obj.ToString();
                        string uniqueColumnName = GetUniqueColumnName(columnName, columnNameCounts);
                        dataTable.Columns.Add(uniqueColumnName);
                    }
         
                }

                // 填充数据
                for (int i = 1; i <= sheet.LastRowNum; i++)
                {
                    IRow row = sheet.GetRow(i);
                    DataRow dataRow = dataTable.NewRow();
                    for (int j = 0; j < columnsCount; j++)
                    {
                        if (row.GetCell(j) != null)
                        {
                            dataRow[j] = row.GetCell(j).ToString();
                        }
                    }
                    dataTable.Rows.Add(dataRow);
                }
            }

            return dataTable;
        }

        static string GetUniqueColumnName(string columnName, Dictionary<string, int> columnNameCounts)
        {
            if (!columnNameCounts.ContainsKey(columnName))
            {
                columnNameCounts[columnName] = 1;
                return columnName;
            }
            else
            {
                int count = columnNameCounts[columnName];
                columnNameCounts[columnName] = count + 1;
                return $"{columnName}{count + 1}";
            }
        }

 

标签:string,C#,EXCEL,NPOI,columnName,workbook,new,columnNameCounts,DataTable
From: https://www.cnblogs.com/jtcr/p/18115688

相关文章

  • ARM上面ubuntu部署chromedriver的过程
    ARM上面ubuntu部署chromedriver的过程直接上方案cat>sources.list<<EOFdebhttp://ftp.de.debian.org/debiansidmainEOFcat>key<<EOFapt-keyadv--keyserverkeyserver.ubuntu.com--recv-keys0E98404D386FA1D9apt-keyadv--keyserverkeyserver.ub......
  • File '*.cls' not found.LaTeX问题原因和解决方案
    关于.cls文件.cls文件是latex用于定义文档总体样式的文件,通常在\documentclass[]{*.cls}中使用,例如常用的artical.csl,使用方式是\documentclass[]{artical}错误原因很显然是找不到“XXX.cls”文件导致的,原因是latex包的供应方没有提供相应的.cls文件。可以通过搜索.cls文件知......
  • 基于微信小程序的外卖管理系统的设计与实现(论文+源码)_kaic
    摘 要互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对高校教师成果信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用外卖小程序可以有效管理,使信......
  • P7859 [COCI2015-2016#2] GEPPETTO
    原题链接这真的是橙题吗题解读题,每个材料都有用或不用两种选择,然后n的数据范围也很小,所以考虑二进制dp(别管我为什么不叫状态压缩)遍历0到\(2^{20}-1\)(十进制下),如果存在互相矛盾的1,代表这个状态不能用code#include<bits/stdc++.h>usingnamespacestd;intn,m;map<int......
  • transformer结构-position_encoding层
    transformer结构-position_encoding层1完整代码importmathimporttorchimporttorch.nnasnnclassPositionEncoding(nn.Module):def__init__(self,d_model,dropout,max_len):"""d_model:词嵌入维度max_len:每个句子最大长度。......
  • 企业员工岗前培训管理系统的设计与实现(论文+源码)_kaic
    摘 要有效的处理想要的相关信息和如何传播有效的信息,一直是人类不断探索的动力。人类文明火种的传承都是通过了多种媒介作为载体,也是随着社会生产力的发展不断的更新。随着互联网的到来,信息传播与管理都上升了一个新的台阶,并且方便应用的同时也要考虑信息传播的安全性,所以编......
  • 【题单】 往届 CSP/s 题目(洛谷)
    这里写目录标题updata20232022202120202019updata2023P9752[CSP-S2023]密码锁P9753[CSP-S2023]消消乐P9754[CSP-S2023]结构体P9755[CSP-S2023]种树2022P8817[CSP-S2022]假期计划P8818[CSP-S2022]策略游戏P8819[CSP-S2022]星战P8820[......
  • 攻防世界no-strings-attached做法(简易版)
    首先查个壳,发现没壳,是32bit,那就丢进ida32中进行反编译进入main函数查看,里面有很多个函数,挨个点进去看看,找找关键点进入最后一个函数,发现了些东西,两个函数输出success和denied,if括号内的条件就得为非0,也就是说ws数组和s2数组相等才行,上面对s2数组进行了处理,那就直接看他咋处理的......
  • 万户ezOFFICE-wf_printnum.jsp存在SQL注入漏洞
    声明:本文仅用于技术交流,请勿用于非法用途由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。简介万户EZOFFICE是一款办公软件,由中国万户网络科技有限公司开发和提供。该软件提供了一系列办公管理工具,包括......
  • LC 96.不同的二叉搜索树
    96.不同的二叉搜索树给你一个整数n,求恰由n个节点组成且节点值从1到n互不相同的二叉搜索树有多少种?返回满足题意的二叉搜索树的种数。示例1:**输入:**n=3**输出:**5示例2:**输入:**n=1**输出:**1提示:1......