首页 > 编程语言 >C# 获取excel某列单元值的特殊数值处理方式(根据单元数据格式编码获取小位数)

C# 获取excel某列单元值的特殊数值处理方式(根据单元数据格式编码获取小位数)

时间:2025-01-17 10:43:33浏览次数:1  
标签:string val format cell 获取 数据格式 单元 某列

当excel文件某列单元数值显示的值和实际的值不一致:
1.某列某单元显示:38,实际值是38.43,只取显示的38的值。
2.某列某单元显示:38.68,实际值是38.685,只取显示的38.68的值。
注释:如果没有格式并且不是默认的常规格式,是文本格式时,读取什么值则返回什么值。
以下是本人写的公共静态帮助类,可以直接使用:

using NPOI.SS.UserModel;
using System;
using System.Linq;
using System.Text.RegularExpressions;

namespace ExcelAPPCase
{
    /// <summary>
    /// 获取excel单元值帮助类
    /// </summary>
    public static class ExcelExtendHelper
    {
        //获取单元值
        public static string GetCellValue(this ICell cell)
        {
            try
            {
                object val = null;
                switch (cell.CellType)
                {
                    case CellType.Blank:
                        val = "";
                        break;
                    case CellType.Numeric:
                        short format = cell.CellStyle.DataFormat;
                        if (DateUtil.IsCellDateFormatted(cell) || format == 14 || format == 31 || format == 57 || format == 58)
                        {
                            val = cell.DateCellValue;
                        }
                        else
                        {
                            val = cell.NumericCellValue;
                            if (val != null && !string.IsNullOrEmpty(val.ToString()))
                            {
                                ICellStyle cellStyle = cell.CellStyle;
                                // 解析数字格式字符串获取小数位数
                                string formatCode = cellStyle.GetDataFormatString();
                                int? _dotCount = GetformatVal(formatCode);
                                if (_dotCount!=null)
                                {
                                    decimal converVal=Convert.ToDecimal(val);
                                    val= Math.Round(converVal, (int)_dotCount,MidpointRounding.AwayFromZero);
                                }
                            }
                        }
                        break;
                    case CellType.String:
                        val = cell.StringCellValue;
                        break;
                }
                return val?.ToString().Trim();
            }
            catch (Exception ex)
            {
                return "";
            }
        }
        //根据单元数据格式编码获取小位数
        public static int? GetformatVal(string formatCode)
        {
            int decimalPlaces = 0;
            string pattern = @"\d+(\.\d+)?";
            System.Text.RegularExpressions.Match match = Regex.Match(formatCode, pattern);
            if (match.Success)
            {
                string _number = match.Value;
                if (_number.Contains('.'))
                {
                    decimalPlaces = _number.Split('.')[1].Length;
                }
            }
            else
            {
                return null;
            }
            return decimalPlaces;
        }
    }
}

标签:string,val,format,cell,获取,数据格式,单元,某列
From: https://www.cnblogs.com/aliangblog/p/18676460

相关文章

  • 获取小程序用户信息
    获取小程序用户信息云开发的云函数的独特优势在于与微信登录鉴权的无缝整合。当小程序端调用云函数时,云函数的传入参数中会被注入小程序端用户的openid,开发者无需校验openid的正确性,因为微信已经完成了这部分鉴权,开发者可以直接使用该openid。与openid一起同时注入云函数的......
  • 介绍5种从resources获取inputStream的方法
    在大多数情况下,推荐使用ResourceLoader或ClassPathResource来加载资源文件。@Component@Slf4jpublicclassTestFileService{@AutowiredprivateResourceLoaderresourceLoader;@PostConstructpublicvoidtestInputStream()throwsIOException{......
  • 使用Python爬虫获取1688网站item_get_company API接口的公司档案信息
    一、引言在当今的商业环境中,获取供应商的详细信息对于采购决策、市场分析和供应链管理至关重要。1688作为中国领先的B2B电子商务平台,提供了丰富的供应商档案信息。通过使用1688的item_get_companyAPI接口,我们可以方便地获取这些信息。本文将详细介绍如何使用Python爬虫来调用该A......
  • 使用Python爬虫获取1688网站实力档案信息
    引言1688是阿里巴巴旗下的B2B电子商务平台,提供了丰富的商品和供应商信息。为了获取供应商的实力档案信息,我们可以使用1688的API接口item_get_strength。本文将详细介绍如何使用Python爬虫来调用该API并获取所需信息。环境准备在开始之前,请确保你的系统已经安装了以下工具和库:......
  • 微信小程序获取openid
    2025年1月15日:注意:其中appid,secret,还有服务器网址都按自己实际的填写1、先在云服务器上安装nodejs,然后写个get接口:constexpress=require('express');constapp=express();app.get('/getOpenid',(req,res)=>{res.send("success");})app.listen(3000,()=>......
  • C# NAudio 获取控制系统音量
    https://github.com/naudio/NAudioNAudio是一个开源的.NET音频库,由MarkHeath开发,开源地址:https://github.com/naudio/NAudio支持多种音频操作,可实现多种API播放与录制、多种不同音频格式、音频格式转换(重采样、位深、声道等)、音频编码、多通道播放、音频效果处理等等。NA......
  • vue2子组件获取父组件的实例以及数据,vue2子组件获取父组件的数据
    多个组件引入同一个js文件,实例化对象,数据不会错乱,再引入相同的组件,例如每个页面都需要引入到一个分页组件,然后分页组件需要获取各自父组件中的实例对象通过  this.$parent 即可获取到父组件中的数据所以在使用子组件时可以不用在组件上传入数据 公共js文件functionda......
  • HTML应用指南:利用GET请求获取微博用户特定标签的文章内容
    本篇文章,我们将探究GET请求的实际应用,我们使用Python的requests库通过GET请求抓取微博网页版(https://weibo.com/)的用户发布内容,因为微博整体使用的也是GET请求形式。随着城市化进程的加速,公共交通系统在人们的日常生活中扮演着越来越重要的角色。地铁作为大中型城市的主要......
  • 利用 Java 爬虫获取 1688 商品评论的实践指南
    在电商领域,商品评论是消费者决策的重要参考因素,同时也是商家了解产品反馈、优化服务的关键数据来源。1688作为国内知名的B2B电商平台,拥有海量的商品评论数据。本文将详细介绍如何利用Java爬虫技术获取1688商品评论,并提供代码示例,帮助读者快速上手。一、项目背景与目标......
  • 获取阿里巴巴商品详情的高效途径:API调用与代码示例
    在当今电商蓬勃发展的时代,阿里巴巴作为全球知名的B2B平台,汇聚了海量的商品信息。对于开发者和商家而言,能够精准、高效地获取这些商品详情数据,无疑将为业务拓展和决策提供强大助力。本文将为您详细解读如何通过阿里巴巴开放平台API获取商品详情,并附上实用的代码示例,助您轻松上手......