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的旧版本,临时写出来用的
一个是操作合并后的单元格一个是操作特定单元格的