NOPI向Excel单元格写入数字、字符

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop.Excel;
using NPOI;
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;
using NPOI.SS.Util;
using NPOI.HSSF.Util;
using NPOI.XSSF.UserModel;
using System.IO;

namespace CDQuantitySheet
{
    public class ExcelHelp
    {


        //HSSFWorkbook wk = null;
        IWorkbook wk;
        bool xls = true;
        public ExcelHelp( string fileNameS)
        {
            string tempPath = fileNameS;
            string fileExt = Path.GetExtension(tempPath);
            using (var fs = new FileStream(tempPath, FileMode.Open, FileAccess.Read))
            {

                if (fileExt == ".xls")
                {
                    wk = new HSSFWorkbook(fs);
                    xls = true;
                }
                else if (fileExt == ".xlsx")
                {
                    wk = new XSSFWorkbook(fs);
                    xls = false;
                }                
            }
        
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="rowx">行数</param>
        /// <param name="rowy">列数</param>
        /// <param name="value">值</param>
        public void OperaExcel(int firstrow ,int firstcell ,int lastrow ,int lastcell, double value)
        {
            try
            {
                ISheet sheet = wk.GetSheet("Sheet1");

                IRow row = sheet.GetRow(firstrow);
                ICell cell = row.GetCell(firstcell);
                cell.SetCellValue(value);
                
                sheet.AddMergedRegion(new CellRangeAddress(firstrow, lastrow, firstcell, lastcell));
            }
            catch
            {
                
            }
           
        }
        public void OperaExcel(int firstrow, int firstcell, int lastrow, int lastcell, string value)
        {
            try
            {
                ISheet sheet = wk.GetSheet("Sheet1");

                IRow row = sheet.GetRow(firstrow);
                ICell cell = row.GetCell(firstcell);
                cell.SetCellValue(value);

                sheet.AddMergedRegion(new CellRangeAddress(firstrow, lastrow, firstcell, lastcell));
            }
            catch
            {

            }
        }
        public void OperaRowCell(int row, int cell, int value) {
            try
            {
                ISheet sheet = wk.GetSheet("管线点数和长度统计表");
                if (sheet == null) //如果没有找到指定的sheetName对应的sheet,则尝试获取第一个sheet
                {
                    sheet = wk.GetSheetAt(0);
                }
                IRow row1 = sheet.GetRow(row);
                ICell cell1 = row1.GetCell(cell);
                cell1.SetCellValue(value);
                pipenumber = value + pipenumber;

                sheet.AddMergedRegion(new CellRangeAddress(row, row, cell, cell));

            }

            catch
            {
               
            }
        }


        public void SaveExcel(string fileNameE)
        {
            //" + fileNameE + "Excel表" + DateTime.Now.ToString("s") + ".xls
            string path;

            if (xls == true)
            {
                path = "" + fileNameE + "\\Excel表" + DateTime.Now.ToString("D") + ".xls";
            }
            else 
            {
                path = "" + fileNameE + "\\Excel表" + DateTime.Now.ToString("D") + ".xlsx";
                MessageBox.Show("注意:选择.xlsx格式可能有不可预知的错误");
            }
            //path = GetNewPathForDupes(path);
            using (FileStream fileStream = File.Open(path,
            FileMode.OpenOrCreate, FileAccess.ReadWrite))
            {
                wk.Write(fileStream);
                fileStream.Close();
            }
            MessageBox.Show("生成成功");
        }

        /// <summary>
        /// Generates a new path for duplicate filenames.
        /// </summary>
        /// <param name="path">The path.</param>
        /// <returns></returns>
        private string GetNewPathForDupes(string path)
        {
            string directory = Path.GetDirectoryName(path);
            string filename = Path.GetFileNameWithoutExtension(path);
            string extension = Path.GetExtension(path);
            int counter = 1;
            string newFullPath;
            do
            {
                string newFilename = string.Format("{0}({1}).{2}",filename, counter, extension);
                newFullPath = Path.Combine(directory, newFilename);
                counter++;
            } while (File.Exists(newFullPath));
            return newFullPath;
        }



    }
}

只支持xls,也就是excel的旧版本,临时写出来用的

一个是操作合并后的单元格一个是操作特定单元格的

在C#的NPOI库中,NOPI(Non-POI API)是一个高性能的底层API,用于处理Excel文件。如果你想设置单元格的类型,你可以通过`HSSFFormulaEvaluator`和`HSSFCell`类来操作。首先,你需要获取到需要修改的单元格,然后设置其对应的`CellType`属性。 例如: ```csharp using org.apache.poi.ss.usermodel; using org.apache.poi.hssf.usermodel; using org.apache.poi.hssf.util; // 创建HSSFWorkbook对象(读取已有工作簿) HSSFWorkbook workbook = new HSSFWorkbook(yourWorkbookStream); // 获取HSSFSheet对象 HSSFSheet sheet = workbook.GetSheetAt(0); // 获取HSSFRow对象,假设我们要操作第一行 HSSFRow row = sheet.GetRow(0); // 获取HSSFCell对象,假设我们要操作第一个单元格 HSSFCell cell = row.GetCell(0); // 使用HSSFFormulaEvaluator来检查当前值是否影响类型 HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(workbook); if (evaluator.EvaluateFormula(cell).Type != CellType.BLANK) { // 如果不是空白单元格,设置细胞类型 switch (cell.NumericCellValue) { case double.NaN: cell.CellType = CellType.BLANK; // 清空数字 break; case decimal.MinValue: case decimal.MaxValue: cell.CellType = CellType.NUMERIC; // 数字类型的极端值 break; default: cell.CellType = CellType.STRING; // 默认字符串类型 break; } } // 关闭工作簿流 workbook.Close(); ``` 这里我们检查了单元格的数值类型,根据不同的情况设置了不同的`CellType`。注意,`NumericCellValue`会返回`double.NaN`表示公式错误,这会被认为是空白单元格
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值