excel export and import NPOI

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using NPOI.HPSF;
using NPOI.HSSF.UserModel;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;
using NPOI.SS.Util;

namespace TestApp
{
public class NPOIHelper
{

private HSSFWorkbook hssfworkbook = new HSSFWorkbook();

private string xlsPath="";

public NPOIHelper(string path)
{
xlsPath = path;
using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read))
{
hssfworkbook = new HSSFWorkbook(file);
}
}

#region property

public string XlsPath
{
get { return xlsPath; }
set { xlsPath = value; }
}

#endregion

#region method
/// <the Summary>
/// creates an empty Excel document, specify the sheet name
/// </ the Summary>
/// <param name = "xlspath"> Excel save path, the default extension is xls < / param>
/// <param name = "sheets"> Sheet name </ param>
public void CreateEmptyExcelFile (String xlspath, the params String [] sheets)
{
InitializeWorkbook ();

if (sheets.Count()>0)
{
for (int i = 0; i < sheets.Count(); i++)
{
hssfworkbook.CreateSheet(sheets[i]);
}
}
else
{
hssfworkbook.CreateSheet("sheet1");
}

((HSSFSheet)hssfworkbook.GetSheetAt(0)).AlternativeFormula = false;
((HSSFSheet)hssfworkbook.GetSheetAt(0)).AlternativeExpression = false;

FileStream file = new FileStream(xlspath+".xls", FileMode.Create);
hssfworkbook.Write(file);
file.Close();
}
#endregion

#region private methods

/// <summary>
/// 设置xls的信息
/// </summary>
private void InitializeWorkbook()
{
DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
dsi.Company = "NPOI Team";
hssfworkbook.DocumentSummaryInformation = dsi;

SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
si.Subject = "NPOI Example";
hssfworkbook.SummaryInformation = si;
}

private void WriteToFile()
{
//Write the stream data of workbook to the root directory
FileStream file = new FileStream(xlsPath, FileMode.Create);
hssfworkbook.Write(file);
file.Close();
}

#endregion

/// <summary>
/// 写入数据,无格式
/// </summary>
/// <param name="Sheetindex">sheet索引</param>
/// <param name="value"></param>
public void SetCellValuesInXls(int Sheetindex, int RowIndex, int CellIndex, string value)
{
InitializeWorkbook();

ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);

sheet1.CreateRow(RowIndex).CreateCell(CellIndex).SetCellValue(value);

WriteToFile();
}
/// <summary>
/// 写入日期格式
/// </summary>
/// <param name="Sheetindex"></param>
/// <param name="RowIndex"></param>
/// <param name="CellIndex"></param>
/// <param name="value"></param>
public void SetDateCellInXls(int Sheetindex, int RowIndex, int CellIndex, string date)
{
InitializeWorkbook();

ISheet sheet = hssfworkbook.GetSheetAt(Sheetindex);
// Create a row and put some cells in it. Rows are 0 based.
IRow row = sheet.CreateRow(RowIndex);

// Create a cell and put a date value in it. The first cell is not styled as a date.
ICell cell = row.CreateCell(CellIndex);
cell.SetCellValue(date);

ICellStyle cellStyle = hssfworkbook.CreateCellStyle();

cellStyle.DataFormat = hssfworkbook.CreateDataFormat().GetFormat("yyyy年m月d日");
cell.CellStyle = cellStyle;

//ICell cell2 = row.CreateCell(1);
//cell2.SetCellValue(new DateTime(2008, 5, 5));
//ICellStyle cellStyle2 = hssfworkbook.CreateCellStyle();
//IDataFormat format = hssfworkbook.CreateDataFormat();
//cellStyle2.DataFormat = format.GetFormat("yyyy年m月d日");
//cell2.CellStyle = cellStyle2;

//ICell cell3 = row.CreateCell(2);
//cell3.CellFormula = "DateValue(\"2005-11-11 11:11:11\")";
//ICellStyle cellStyle3 = hssfworkbook.CreateCellStyle();
//cellStyle3.DataFormat = HSSFDataFormat.GetBuiltinFormat("m/d/yy h:mm");
//cell3.CellStyle = cellStyle3;

WriteToFile();
}
/// <summary>
/// 增加备注
/// </summary>
/// <param name="Sheetindex"></param>
/// <param name="RowIndex"></param>
/// <param name="CellIndex"></param>
/// <param name="value"></param>
/// <param name="commentStr">备注信息</param>
public void SetCellCommentInXls(int Sheetindex, int RowIndex, int CellIndex, string value, string commentStr)
{
InitializeWorkbook();

ISheet sheet = hssfworkbook.GetSheetAt(Sheetindex);

IDrawing patr = (HSSFPatriarch)sheet.CreateDrawingPatriarch();

ICell cell1 = sheet.CreateRow(RowIndex).CreateCell(CellIndex);
cell1.SetCellValue(new HSSFRichTextString(value));

//anchor defines size and position of the comment in worksheet
IComment comment1 = patr.CreateCellComment(new HSSFClientAnchor(0, 0, 0, 0, 4, 2, 6, 5));

// set text in the comment
comment1.String = (new HSSFRichTextString(commentStr));

// The first way to assign comment to a cell is via HSSFCell.SetCellComment method
cell1.CellComment = (comment1);
#region old
////Create another cell in row 6
//ICell cell2 = sheet.CreateRow(6).CreateCell(1);
//cell2.SetCellValue(value);
//HSSFComment comment2 = (HSSFComment)patr.CreateCellComment(new HSSFClientAnchor(0, 0, 0, 0, 4, 8, 6, 11));
////modify background color of the comment
//comment2.SetFillColor(204, 236, 255);
//HSSFRichTextString str = new HSSFRichTextString("Normal body temperature");
////apply custom font to the text in the comment
//IFont font = hssfworkbook.CreateFont();
//font.FontName = ("Arial");
//font.FontHeightInPoints = 10;
//font.Boldweight = (short)FontBoldWeight.BOLD;
//font.Color = HSSFColor.RED.index;
//str.ApplyFont(font);
//comment2.String = str;
//comment2.Visible = true; //by default comments are hidden. This one is always visible.
//comment2.Author = "Bill Gates";
///**
// * The second way to assign comment to a cell is to implicitly specify its row and column.
// * Note, it is possible to set row and column of a non-existing cell.
// * It works, the commnet is visible.
// */
//comment2.Row = 6;
//comment2.Column = 1;
#endregion
WriteToFile();
}
/// <summary>
/// 给表格画边框
/// </summary>
/// <param name="Sheetindex"></param>
/// <param name="RowIndex"></param>
/// <param name="CellIndex"></param>
public void SetBorderStyleInXls(int Sheetindex, int RowIndex, int CellIndex)
{
InitializeWorkbook();

ISheet sheet = hssfworkbook.GetSheetAt(Sheetindex);

// Create a row and put some cells in it. Rows are 0 based.
IRow row = sheet.GetRow(RowIndex);

// Create a cell and put a value in it.
ICell cell = row.GetCell(CellIndex);

// Style the cell with borders all around.
ICellStyle style = hssfworkbook.CreateCellStyle();
style.BorderBottom = BorderStyle.THIN;
style.BottomBorderColor = HSSFColor.BLACK.index;
style.BorderLeft = BorderStyle.DASH_DOT_DOT;
style.LeftBorderColor = HSSFColor.GREEN.index;
style.BorderRight = BorderStyle.HAIR;
style.RightBorderColor = HSSFColor.BLUE.index;
style.BorderTop = BorderStyle.MEDIUM_DASHED;
style.TopBorderColor = HSSFColor.ORANGE.index;
cell.CellStyle = style;

WriteToFile();
}
/// <summary>
/// 给单元格加公式
/// </summary>
/// <param name="Sheetindex"></param>
/// <param name="RowIdex"></param>
/// <param name="CellIndex"></param>
/// <param name="formula">公式</param>
public void SetFormulaOfCellInXls(int Sheetindex, int RowIdex, int CellIndex, string formula)
{
InitializeWorkbook();

ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);

ICellStyle blackBorder = hssfworkbook.CreateCellStyle();
blackBorder.BorderBottom = BorderStyle.THIN;
blackBorder.BorderLeft = BorderStyle.THIN;
blackBorder.BorderRight = BorderStyle.THIN;
blackBorder.BorderTop = BorderStyle.THIN;
blackBorder.BottomBorderColor = HSSFColor.BLACK.index;
blackBorder.LeftBorderColor = HSSFColor.BLACK.index;
blackBorder.RightBorderColor = HSSFColor.BLACK.index;
blackBorder.TopBorderColor = HSSFColor.BLACK.index;

IRow row = sheet1.GetRow(RowIdex);
ICell cell = row.CreateCell(CellIndex);
cell.CellFormula = formula;

WriteToFile();
}
/// <summary>
/// 设置打印区域
/// </summary>
/// <param name="Sheetindex"></param>
/// <param name="Area">"A5:G20"</param>
public void SetPrintAreaInXls(int Sheetindex, string Area)
{
InitializeWorkbook();

hssfworkbook.SetPrintArea(Sheetindex,Area );

The WriteToFile ();
}
/// <Summary>
/// setting print format, default A4 paper
/// </ Summary>
/// <param name = "Sheetindex"> </ param>
/// <param name = "Area"> </ param>
public void SetPrintFormatInXls (int Sheetindex)
{
InitializeWorkbook ();

ISheet sheet1 = hssfworkbook.CreateSheet("Sheet1");
sheet1.SetMargin(MarginType.RightMargin, (double)0.5);
sheet1.SetMargin(MarginType.TopMargin, (double)0.6);
sheet1.SetMargin(MarginType.LeftMargin, (double)0.4);
sheet1.SetMargin(MarginType.BottomMargin, (double)0.3);

sheet1.PrintSetup.Copies = 3;
sheet1.PrintSetup.NoColor = true;
sheet1.PrintSetup.Landscape = true;
sheet1.PrintSetup.PaperSize = (short)PaperSize.A4;

sheet1.FitToPage = true;
sheet1.PrintSetup.FitHeight = 2;
sheet1.PrintSetup.FitWidth = 3;
sheet1.IsPrintGridlines = true;

WriteToFile();
}
/// <summary>
/// 设置表格的宽和高
/// </summary>
/// <param name="Sheetindex"></param>
/// <param name="RowIdex"></param>
/// <param name="width"></param>
/// <param name="height"></param>
public void SetWidthAndHeightInXls(int Sheetindex, int RowIdex,int CellIndex,int width,short height)
{
InitializeWorkbook();

ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);
//set the width of columns
sheet1.SetColumnWidth(CellIndex, width);

//set the width of height
sheet1.GetRow(RowIdex).Height = height;

sheet1.DefaultRowHeightInPoints = 50;

The WriteToFile ();
}
/// <Summary>
/// cell alignment setting
/// </ Summary>
/// <param name = "Sheetindex"> </ param>
/// <param name = "RowIdex "> </ param>
/// <param name =" the cellIndex "> </ param>
/// <param name =" Horizont "> horizontal alignment: left, Center, right, The justify </ param>
/// <param name = "vertical"> vertical alignment: Top, Center, the buttom, The justify </ param>
public void SetAlignmentInXls (int Sheetindex, RowIdex int, int the cellIndex, Horizont String, String vertical)
{
InitializeWorkbook ();

ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);

IRow row = sheet1.GetRow(RowIdex);
ICellStyle style = hssfworkbook.CreateCellStyle();
if (Horizont == "left")
{
style.Alignment = HorizontalAlignment.LEFT;
}
else if (Horizont == "center")
{
style.Alignment = HorizontalAlignment.CENTER;
}
else if (Horizont == "right")
{
style.Alignment = HorizontalAlignment.RIGHT;
}
else if (Horizont == "justify")
{
style.Alignment = HorizontalAlignment.JUSTIFY;
}

if (Vertical == "top")
{
style.VerticalAlignment = VerticalAlignment.TOP;
}
else if (Vertical == "center")
{
style.VerticalAlignment = VerticalAlignment.CENTER;
}
else if (Vertical == "buttom")
{
style.VerticalAlignment = VerticalAlignment.BOTTOM;
}
else if (Vertical=="justify")
{
style.VerticalAlignment = VerticalAlignment.JUSTIFY;
}
style.Indention = 3;

row.GetCell(CellIndex).CellStyle = style;

The WriteToFile ();
}
/// <Summary>
/// zoom workbook scaled according Sub / den
/// </ Summary>
/// <param name = "Sheetindex"> to be amplified sheet </ param>
/// <param name = "sub" > molecular ratio of column </ param>
/// <param name = "den"> than denominator column </ param>
public void ZoomSheet (int Sheetindex, Sub int, int den )
{
InitializeWorkbook ();

ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);
sheet1.SetZoom(sub, den); // 75 percent magnification

The WriteToFile ();
}
/// <Summary>
/// used in the cell a plurality of rows storing data
/// </ Summary>
/// <param name = "Sheetindex"> </ param>
/// <param = name "RowIdex"> </ param>
/// <param name = "the cellIndex"> </ param>
rows /// <param name = "rows" > used </ param>
/// <param name = "value"> back wrap plus \ n-</ param>
public void UseNewlinesInCellsInXls (Sheetindex int, int RowIdex, the cellIndex int, int rows, String value)
{
InitializeWorkbook ();

ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);

//use newlines in cell
IRow row1 = sheet1.GetRow(RowIdex);
ICell cell1 = row1.GetCell(CellIndex);

//to enable newlines you need set a cell styles with wrap=true
ICellStyle cs = hssfworkbook.CreateCellStyle();
cs.WrapText = true;
cell1.CellStyle = cs;

row1.HeightInPoints = rows * sheet1.DefaultRowHeightInPoints;
cell1.SetCellValue(value);
WriteToFile();
}
/// <summary>
/// 单元格使用基础公式
/// </summary>
/// <param name="Sheetindex"></param>
/// <param name="RowIdex"></param>
/// <param name="CellIndex"></param>
/// <param name="Formula"></param>
public void UseBasicFormulaInXls(int Sheetindex, int RowIdex, int CellIndex, string Formula)
{
InitializeWorkbook();
ISheet s1 = hssfworkbook.GetSheetAt(Sheetindex);
//set A4=A2+A3,set D2=SUM(A2:C2);A5=cos(5)+sin(10)
s1.GetRow(RowIdex).GetCell(CellIndex).CellFormula = Formula;
WriteToFile();
}


/// <Summary>
/// frozen rows, FreezeRow to be frozen rows
/// </ Summary>
/// <param name = "Sheetindex"> </ param>
public void SplitAndFreezePanes (Sheetindex int, int FreezeRow)
{
InitializeWorkbook ();

ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);

// Freeze just one row
sheet1.CreateFreezePane(0, FreezeRow);

WriteToFile();
}


/// <summary>
/// 缩放指定单元格字体
/// </summary>
/// <param name="Sheetindex"></param>
/// <param name="RowIdex"></param>
/// <param name="CellIndex"></param>
public void ShrinkToFitColumnInXls(int Sheetindex, int RowIdex, int CellIndex)
{
InitializeWorkbook();

ISheet sheet = hssfworkbook.GetSheetAt(Sheetindex);
IRow row = sheet.GetRow(RowIdex);
//create cell value
ICell cell1 = row.GetCell(CellIndex);

ICellStyle cellstyle1 = hssfworkbook.CreateCellStyle();
cellstyle1.ShrinkToFit = true;
WriteToFile();
}


/// <summary>
/// 将字体旋转指定角度
/// </summary>
/// <param name="Sheetindex"></param>
/// <param name="RowIdex"></param>
/// <param name="CellIndex"></param>
/// <param name="Angle"></param>
public void RotateTextInXls(int Sheetindex, int RowIdex, int CellIndex,short Angle)
{
InitializeWorkbook();

ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);

IRow row = sheet1.GetRow(RowIdex);
//set the style
ICellStyle style = hssfworkbook.CreateCellStyle();
style.Rotation = Angle;
row.GetCell(CellIndex).CellStyle = style;

WriteToFile();
}

public void RepeatingRowsAndColumns(int Sheetindex, int RowIdex, int CellIndex)
{
InitializeWorkbook();

ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);

IFont boldFont = hssfworkbook.CreateFont();
boldFont.FontHeightInPoints = 22;
boldFont.Boldweight = (short)FontBoldWeight.BOLD;

ICellStyle boldStyle hssfworkbook.CreateCellStyle = ();
boldStyle.SetFont (boldFont);

IRow row = sheet1.GetRow(RowIdex);
ICell cell = row.GetCell(CellIndex);
cell.CellStyle = (boldStyle);

// Set the columns to repeat from column 0 to 2 on the first sheet
hssfworkbook.SetRepeatingRowsAndColumns(Sheetindex, 0, 2, -1, -1);

WriteToFile();
}

 

/// <summary>
/// 向单元格中写入数字格式
/// </summary>
/// <param name="Sheetindex"></param>
/// <param name="RowIdex"></param>
/// <param name="CellIndex"></param>
/// <param name="type">double,RMB,scentific,percent,phone,ChineseCapital,ChineseDate</param>
public void NumberFormatInXls(int Sheetindex, int RowIdex, int CellIndex,string type)
{
InitializeWorkbook();

ISheet sheet = hssfworkbook.GetSheetAt(Sheetindex);
//increase the width of Column A
sheet.SetColumnWidth(0, 5000);
//create the format instance
IDataFormat format = hssfworkbook.CreateDataFormat();

// Create a row and put some cells in it. Rows are 0 based.
ICell cell = sheet.GetRow(RowIdex).GetCell(CellIndex);
ICellStyle cellStyle = hssfworkbook.CreateCellStyle();

if (type=="double")
{
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00");
}
else if (type == "RMB")
{
cellStyle.DataFormat = format.GetFormat("¥#,##0");
}
else if (type == "scentific")
{
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00E+00");
}
else if (type == "percent")
{
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00%");
}
else if (type == "phone")//phone number format - "021-65881234"
{
cellStyle.DataFormat = format.GetFormat("000-00000000");
}
else if (type == "ChineseCapital") //Chinese capitalized character number - 壹贰叁 元
{
cellStyle.DataFormat = format.GetFormat("[DbNum2][$-804]0 元");
}
else if (type == "ChineseDate")
{
cellStyle.DataFormat = format.GetFormat("yyyy年m月d日");
}
cell.CellStyle = cellStyle;

WriteToFile();
}


/// <Summary>
/// The cell is given a product of two tables
/// </ Summary>
/// <param name = "Sheetindex"> </ param>
/// <param name = "RowIdex "> cell in the row assigned to index </ param>
/// <param name =" the cellIndex "> assigned to the lead unit Ge Liesuo </ param>
/// <param name =" targateRow1 "> first unit cell line </ param>
/// <param name = "targateCell1"> the first column of the cell </ param>
/// <param name = "targateRow2"> second cell line </ param >
column /// <param name = "targateCell2" > second cell </ param>
public void MultplicationTableInXls (Sheetindex int, int RowIdex, the cellIndex int, int targateRow1, targateCell1 int,
int targateRow2, int targateCell2)
{
InitializeWorkbook ();

ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);

IRow row = sheet1.GetRow(RowIdex);

string formula = GetCellPosition(targateRow1, targateCell1) + "*" + GetCellPosition(targateRow2, targateCell2);

row.CreateCell(CellIndex).CellFormula = formula;

WriteToFile();
}
public string GetCellPosition(int row, int col)
{
col = Convert.ToInt32('A') + col;
row = row + 1;
return ((char)col) + row.ToString();
}
/// <summary>
/// 合并单元格
/// </summary>
/// <param name="Sheetindex"></param>
/// <param name="firstRowIdex">起始单元格</param>
/// <param name="firstCellIndex"></param>
/// <param name="lastRowIdex">结束单元格</param>
/// <param name="lastCellIndex"></param>
public void MergeCellsInXls(int Sheetindex, int firstRowIdex, int firstCellIndex, int lastRowIdex, int lastCellIndex)
{
InitializeWorkbook();

ISheet sheet = hssfworkbook.GetSheetAt(Sheetindex);

sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 5));

CellRangeAddress region = new CellRangeAddress(firstRowIdex, lastRowIdex, firstCellIndex, lastCellIndex);

sheet.AddMergedRegion(region);

WriteToFile();
}

#region 未处理
public void LoanCalculator(int Sheetindex, int RowIdex, int CellIndex)
{
InitializeWorkbook();
Dictionary<String, ICellStyle> styles = CreateStyles(hssfworkbook);
ISheet sheet = hssfworkbook.GetSheetAt(Sheetindex);
sheet.IsPrintGridlines = (false);//取消打印格的显示
sheet.DisplayGridlines = (false);

IPrintSetup printSetup = sheet.PrintSetup;
printSetup.Landscape = (true);
sheet.FitToPage = (true);
sheet.HorizontallyCenter = (true);

sheet.SetColumnWidth(0, 3 * 256);
sheet.SetColumnWidth(1, 3 * 256);
sheet.SetColumnWidth(2, 11 * 256);
sheet.SetColumnWidth(3, 14 * 256);
sheet.SetColumnWidth(4, 14 * 256);
sheet.SetColumnWidth(5, 14 * 256);
sheet.SetColumnWidth(6, 14 * 256);

CreateNames(hssfworkbook);

IRow titleRow = sheet.CreateRow(0);
titleRow.HeightInPoints = (35);
for (int i = 1; i <= 7; i++)
{
titleRow.CreateCell(i).CellStyle = styles["title"];
}
ICell titleCell = titleRow.GetCell(2);
titleCell.SetCellValue("Simple Loan Calculator");
sheet.AddMergedRegion(CellRangeAddress.ValueOf("$C$1:$H$1"));

IRow row = sheet.CreateRow(2);
ICell cell = row.CreateCell(4);
cell.SetCellValue("Enter values");
cell.CellStyle = styles["item_right"];

row = sheet.CreateRow(3);
cell = row.CreateCell(2);
cell.SetCellValue("Loan amount");
cell.CellStyle = styles["item_left"];
cell = row.CreateCell(4);
cell.CellStyle = styles["input_$"];
cell.SetAsActiveCell();

row = sheet.CreateRow(4);
cell = row.CreateCell(2);
cell.SetCellValue("Annual interest rate");
cell.CellStyle = styles["item_left"];
cell = row.CreateCell(4);
cell.CellStyle = styles["input_%"];

row = sheet.CreateRow(5);
cell = row.CreateCell(2);
cell.SetCellValue("Loan period in years");
cell.CellStyle = styles["item_left"];
cell = row.CreateCell(4);
cell.CellStyle = styles["input_i"];

row = sheet.CreateRow(6);
cell = row.CreateCell(2);
cell.SetCellValue("Start date of loan");
cell.CellStyle = styles["item_left"];
cell = row.CreateCell(4);
cell.CellStyle = styles["input_d"];

row = sheet.CreateRow(8);
cell = row.CreateCell(2);
cell.SetCellValue("Monthly payment");
cell.CellStyle = styles["item_left"];
cell = row.CreateCell(4);
cell.CellFormula = ("IF(Values_Entered,Monthly_Payment,\"\")");
cell.CellStyle = styles["formula_$"];

row = sheet.CreateRow(9);
cell = row.CreateCell(2);
cell.SetCellValue("Number of payments");
cell.CellStyle = styles["item_left"];
cell = row.CreateCell(4);
cell.CellFormula = ("IF(Values_Entered,Loan_Years*12,\"\")");
cell.CellStyle = styles["formula_i"];

row = sheet.CreateRow(10);
cell = row.CreateCell(2);
cell.SetCellValue("Total interest");
cell.CellStyle = styles["item_left"];
cell = row.CreateCell(4);
cell.CellFormula = ("IF(Values_Entered,Total_Cost-Loan_Amount,\"\")");
cell.CellStyle = styles["formula_$"];

row = sheet.CreateRow(11);
cell = row.CreateCell(2);
cell.SetCellValue("Total cost of loan");
cell.CellStyle = styles["item_left"];
cell = row.CreateCell(4);
cell.CellFormula = ("IF(Values_Entered,Monthly_Payment*Number_of_Payments,\"\")");
cell.CellStyle = styles["formula_$"];


WriteToFile();
}

/**
* cell styles used for formatting calendar sheets
*/
private static Dictionary<String, ICellStyle> CreateStyles(IWorkbook wb)
{
Dictionary<String, ICellStyle> styles = new Dictionary<String, ICellStyle>();

ICellStyle style = null;
IFont titleFont = wb.CreateFont();
titleFont.FontHeightInPoints = (short)14;
titleFont.FontName = "Trebuchet MS";
style = wb.CreateCellStyle();
style.SetFont(titleFont);
style.BorderBottom = BorderStyle.DOTTED;
style.BottomBorderColor = IndexedColors.GREY_40_PERCENT.Index;
styles.Add("title", style);

IFont itemFont = wb.CreateFont();
itemFont.FontHeightInPoints = (short)9;
itemFont.FontName = "Trebuchet MS";
style = wb.CreateCellStyle();
style.Alignment = (HorizontalAlignment.LEFT);
style.SetFont(itemFont);
styles.Add("item_left", style);

style = wb.CreateCellStyle();
style.Alignment = HorizontalAlignment.RIGHT;
style.SetFont(itemFont);
styles.Add("item_right", style);

style = wb.CreateCellStyle();
style.Alignment = HorizontalAlignment.RIGHT;
style.SetFont(itemFont);
style.BorderRight = BorderStyle.DOTTED;
style.RightBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.BorderBottom = BorderStyle.DOTTED;
style.BottomBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.BorderLeft = BorderStyle.DOTTED;
style.LeftBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.BorderTop = BorderStyle.DOTTED;
style.TopBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.DataFormat = (wb.CreateDataFormat().GetFormat("_($* #,##0.00_);_($* (#,##0.00);_($* \"-\"??_);_(@_)"));
styles.Add("input_$", style);

style = wb.CreateCellStyle();
style.Alignment = HorizontalAlignment.RIGHT;
style.SetFont(itemFont);
style.BorderRight = BorderStyle.DOTTED;
style.RightBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.BorderBottom = BorderStyle.DOTTED;
style.BottomBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.BorderLeft = BorderStyle.DOTTED;
style.LeftBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.BorderTop = BorderStyle.DOTTED;
style.TopBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.DataFormat = (wb.CreateDataFormat().GetFormat("0.000%"));
styles.Add("input_%", style);

style = wb.CreateCellStyle();
style.Alignment = HorizontalAlignment.RIGHT;
style.SetFont(itemFont);
style.BorderRight = BorderStyle.DOTTED;
style.RightBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.BorderBottom = BorderStyle.DOTTED;
style.BottomBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.BorderLeft = BorderStyle.DOTTED;
style.LeftBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.BorderTop = BorderStyle.DOTTED;
style.TopBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.DataFormat = wb.CreateDataFormat().GetFormat("0");
styles.Add("input_i", style);

style = wb.CreateCellStyle();
style.Alignment = (HorizontalAlignment.CENTER);
style.SetFont(itemFont);
style.DataFormat = wb.CreateDataFormat().GetFormat("m/d/yy");
styles.Add("input_d", style);

style = wb.CreateCellStyle();
style.Alignment = HorizontalAlignment.RIGHT;
style.SetFont(itemFont);
style.BorderRight = BorderStyle.DOTTED;
style.RightBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.BorderBottom = BorderStyle.DOTTED;
style.BottomBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.BorderLeft = BorderStyle.DOTTED;
style.LeftBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.BorderTop = BorderStyle.DOTTED;
style.TopBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.DataFormat = wb.CreateDataFormat().GetFormat("$##,##0.00");
style.BorderBottom = BorderStyle.DOTTED;
style.BottomBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.FillForegroundColor = IndexedColors.GREY_25_PERCENT.Index;
style.FillPattern = FillPatternType.SOLID_FOREGROUND;
styles.Add("formula_$", style);

style = wb.CreateCellStyle();
style.Alignment = HorizontalAlignment.RIGHT;
style.SetFont(itemFont);
style.BorderRight = BorderStyle.DOTTED;
style.RightBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.BorderBottom = BorderStyle.DOTTED;
style.BottomBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.BorderLeft = BorderStyle.DOTTED;
style.LeftBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.BorderTop = BorderStyle.DOTTED;
style.TopBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.DataFormat = wb.CreateDataFormat().GetFormat("0");
style.BorderBottom = BorderStyle.DOTTED;
style.BottomBorderColor = IndexedColors.GREY_40_PERCENT.Index;
style.FillForegroundColor = IndexedColors.GREY_25_PERCENT.Index;
style.FillPattern = (FillPatternType.SOLID_FOREGROUND);
styles.Add("formula_i", style);

return styles;
}


//define named ranges for the inputs and formulas
public static void CreateNames(IWorkbook wb)
{
IName name;

name = wb.CreateName();
name.NameName = ("Interest_Rate");
name.RefersToFormula = ("'Loan Calculator'!$E$5");

name = wb.CreateName();
name.NameName = ("Loan_Amount");
name.RefersToFormula = ("'Loan Calculator'!$E$4");

name = wb.CreateName();
name.NameName = ("Loan_Start");
name.RefersToFormula = ("'Loan Calculator'!$E$7");

name = wb.CreateName();
name.NameName = ("Loan_Years");
name.RefersToFormula = ("'Loan Calculator'!$E$6");

name = wb.CreateName();
name.NameName = ("Number_of_Payments");
name.RefersToFormula = ("'Loan Calculator'!$E$10");

name = wb.CreateName();
name.NameName = ("Monthly_Payment");
name.RefersToFormula = ("-PMT(Interest_Rate/12,Number_of_Payments,Loan_Amount)");

name = wb.CreateName();
name.NameName = ("Total_Cost");
name.RefersToFormula = ("'Loan Calculator'!$E$12");

name = wb.CreateName();
name.NameName = ("Total_Interest");
name.RefersToFormula = ("'Loan Calculator'!$E$11");

name = wb.CreateName();
name.NameName = ("Values_Entered");
name.RefersToFormula = ("IF(ISBLANK(Loan_Start),0,IF(Loan_Amount*Interest_Rate*Loan_Years>0,1,0))");
}

#endregion


/// <summary>
/// excel中插入图片,支持jpeg
/// </summary>
/// <param name="Sheetindex"></param>
/// <param name="RowIdex"></param>
/// <param name="CellIndex"></param>
/// <param name="picpath">图片地址</param>
/// <param name="dx1">图片坐标</param>
/// <param name="dy1"></param>
/// <param name="dx2"></param>
/// <param name="dy2"></param>
/// <param name="col1">表格</param>
/// <param name="row1"></param>
/// <param name="col2"></param>
/// <param name="row2"></param>
public void InsertPicturesInXls(int Sheetindex, int RowIdex, int CellIndex, string picpath
,int dx1,int dy1,int dx2,int dy2,int col1,int row1,int col2,int row2)
{
InitializeWorkbook();

ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);

HSSFPatriarch patriarch = (HSSFPatriarch)sheet1.CreateDrawingPatriarch();
//create the anchor
HSSFClientAnchor anchor;
anchor = new HSSFClientAnchor(dx1, dy1, dx2, dy2, col1, row1, col2, row2);
anchor.AnchorType = 2;
//load the picture and get the picture index in the workbook
HSSFPicture picture = (HSSFPicture)patriarch.CreatePicture(anchor, LoadImage(picpath, hssfworkbook));
//Reset the image to the original size.
//picture.Resize(); //Note: Resize will reset client anchor you set.
picture.LineStyle = LineStyle.DashDotGel;

WriteToFile();
}

private int LoadImage(string path, HSSFWorkbook wb)
{
FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[file.Length];
file.Read(buffer, 0, (int)file.Length);
return wb.AddPicture(buffer, PictureType.JPEG);

}
/// <summary>
/// 隐藏Excel行和列
/// </summary>
/// <param name="Sheetindex"></param>
/// <param name="RowIdex"></param>
/// <param name="CellIndex"></param>
/// <param name="isHiddenCol"></param>
public void HideColumnAndRowInXls (int Sheetindex, int RowIdex, int CellIndex,bool isHiddenCol)
{
InitializeWorkbook();

ISheet s = hssfworkbook.GetSheetAt(Sheetindex);
IRow r1 = s.GetRow(RowIdex);

//hide IRow 2
r1.ZeroHeight = true;

//hide column C
s.SetColumnHidden(CellIndex, isHiddenCol);

WriteToFile();
}
/// <summary>
/// 填充背景颜色
/// </summary>
/// <param name="Sheetindex"></param>
/// <param name="RowIdex"></param>
/// <param name="CellIndex"></param>
/// <param name="fpt">填充类型</param>
/// <param name="Forecolor">前景色:NPOI.HSSF.Util.HSSFColor.BLUE.index</param>
/// <param name="backcolor">背景颜色:NPOI.HSSF.Util.HSSFColor.BLUE.index</param>
public void FillBackgroundInXls(int Sheetindex, int RowIdex, int CellIndex,FillPatternType fpt,short Forecolor,short backcolor)
{
InitializeWorkbook();

ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);
//fill background
ICellStyle style1 = hssfworkbook.CreateCellStyle();
style1.FillForegroundColor = Forecolor;
style1.FillPattern = fpt;
style1.FillBackgroundColor = backcolor;
sheet1.GetRow(RowIdex).GetCell(CellIndex).CellStyle= style1;
WriteToFile();
}


/// <summary>
///
/// </summary>
/// <param name="Sheetindex"></param>
/// <param name="RowIdex"></param>
/// <param name="CellIndex"></param>
/// <param name="fontName">字体名</param>
/// <param name="color">颜色</param>
/// <param name="istalic">斜体</param>
/// <param name="IsStrikeout">删除线</param>
/// <param name="size">字体大小</param>
public void ApplyFontInXls(int Sheetindex,int RowIdex, int CellIndex, string fontName, short color, bool istalic, bool IsStrikeout,short size)
{
InitializeWorkbook();

ISheet sheet1 = hssfworkbook.GetSheetAt(Sheetindex);

//font style1: underlined, italic, red color, fontsize=20
IFont font1 = hssfworkbook.CreateFont();
font1.FontName = "宋体";
font1.Color = HSSFColor.RED.index;
font1.IsItalic = istalic;
font1.IsStrikeout = IsStrikeout;
//font1.Underline = (byte)FontUnderlineType.DOUBLE;
font1.FontHeightInPoints = size;
//bind font with style 1

ICell cell1 = sheet1.GetRow(RowIdex).GetCell(CellIndex);
ICellStyle style1 = hssfworkbook.CreateCellStyle();
style1.SetFont(font1);
cell1.CellStyle = style1;
WriteToFile();
}

/// <summary>
/// 设置sheet的颜色
/// </summary>
/// <param name="Sheetindex"></param>
/// <param name="RowIdex"></param>
/// <param name="CellIndex"></param>
public void ChangeSheetTabColorInXls(int Sheetindex)
{
InitializeWorkbook();

ISheet sheet = hssfworkbook.GetSheetAt(Sheetindex);
sheet.TabColorIndex = HSSFColor.AQUA.index;

WriteToFile();
}


public string GetCellValue(int sheetIndex,int rowIndex,int cellIndex)
{
InitializeWorkbook();

ISheet sheet1 = hssfworkbook.GetSheetAt(sheetIndex);

ICell cell= sheet1.GetRow(rowIndex).GetCell(cellIndex);

return cell.StringCellValue;

}

 

#region 导入导出
/*
* DataTable table = new DataTable();
* MemoryStream ms = DataTableRenderToExcel.RenderDataTableToExcel(table) as MemoryStream;
* Response.AddHeader("Content-Disposition", string.Format("attachment; filename=Download.xls"));
* Response.BinaryWrite(ms.ToArray());
* ms.Close();
* ms.Dispose();

* if (this.fuUpload.HasFile)
* {
* DataTable table = DataTableRenderToExcel.RenderDataTableFromExcel(this.fuUpload.FileContent, 1, 0);
* this.gvExcel.DataSource = table;
* this.gvExcel.DataBind();
* }
*/
/// <summary>
/// Datatable导出Excel
/// </summary>
/// <param name="SourceTable"></param>
/// <returns></returns>
private static Stream RenderDataTableToExcel(DataTable SourceTable)
{
HSSFWorkbook workbook = new HSSFWorkbook();
MemoryStream ms = new MemoryStream();
ISheet sheet = workbook.CreateSheet();
IRow headerRow = sheet.CreateRow(0);

// handling header.
foreach (DataColumn column in SourceTable.Columns)
headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);

// handling value.
int rowIndex = 1;

foreach (DataRow row in SourceTable.Rows)
{
IRow dataRow = sheet.CreateRow(rowIndex);
foreach (DataColumn column in SourceTable.Columns)
{
dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());
}

rowIndex++;
}

workbook.Write(ms);
ms.Flush();
ms.Position = 0;

sheet = null;
headerRow = null;
workbook = null;

return ms;
}
/// <summary>
/// Datatable导出Excel
/// </summary>
/// <param name="SourceTable"></param>
/// <param name="FileName"></param>
public static void RenderDataTableToExcel(DataTable SourceTable, string FileName)
{
MemoryStream ms = RenderDataTableToExcel(SourceTable) as MemoryStream;
FileStream fs = new FileStream(FileName, FileMode.Create, FileAccess.Write);
byte[] data = ms.ToArray();

fs.Write(data, 0, data.Length);
fs.Flush();
fs.Close();

data = null;
ms = null;
fs = null;
}
/// <summary>
/// 导出excel为Datatable
/// </summary>
/// <param name="ExcelFileStream"></param>
/// <param name="SheetName"></param>
/// <param name="HeaderRowIndex"></param>
/// <returns></returns>
public static DataTable RenderDataTableFromExcel(Stream ExcelFileStream, string SheetName, int HeaderRowIndex)
{
HSSFWorkbook workbook = new HSSFWorkbook(ExcelFileStream);
ISheet sheet = workbook.GetSheet(SheetName);

DataTable table = new DataTable();

IRow headerRow = sheet.GetRow(HeaderRowIndex);
int cellCount = headerRow.LastCellNum;

for (int i = headerRow.FirstCellNum; i < cellCount; i++)
{
DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
table.Columns.Add(column);
}

int rowCount = sheet.LastRowNum;

for (int i = (sheet.FirstRowNum + 1); i < sheet.LastRowNum; i++)
{
IRow row = sheet.GetRow(i);
DataRow dataRow = table.NewRow();

for (int j = row.FirstCellNum; j < cellCount; j++)
dataRow[j] = row.GetCell(j).ToString();
}

ExcelFileStream.Close();
workbook = null;
sheet = null;
return table;
}
/// <summary>
/// 将Excel转换为Datatable
/// </summary>
/// <param name="ExcelFileStream"></param>
/// <param name="SheetIndex"></param>
/// <param name="HeaderRowIndex"></param>
/// <returns></returns>
public static DataTable RenderDataTableFromExcel(Stream ExcelFileStream, int SheetIndex, int HeaderRowIndex)
{
HSSFWorkbook workbook = new HSSFWorkbook(ExcelFileStream);
ISheet sheet = workbook.GetSheetAt(SheetIndex);

DataTable table = new DataTable();

IRow headerRow = sheet.GetRow(HeaderRowIndex);
int cellCount = headerRow.LastCellNum;

for (int i = headerRow.FirstCellNum; i < cellCount; i++)
{
DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
table.Columns.Add(column);
}

int rowCount = sheet.LastRowNum;

for (int i = (sheet.FirstRowNum + 1); i < sheet.LastRowNum; i++)
{
IRow row = sheet.GetRow(i);
DataRow dataRow = table.NewRow();

for (int j = row.FirstCellNum; j < cellCount; j++)
{
if (row.GetCell(j) != null)
dataRow[j] = row.GetCell(j).ToString();
}

table.Rows.Add(dataRow);
}

ExcelFileStream.Close();
workbook = null;
sheet = null;
return table;
}

#endregion


}
}

NPOIHelpercel format and provided by the operating component NPoI Excel format and provided

Guess you like

Origin www.cnblogs.com/shcLenmon/p/12029633.html