excel讀寫使用NPOI Library
參考了下列資料後
在 Server 端存取 Excel 檔案的利器:NPOI Library
改寫一下方便自己使用
參考文獻:
在 Server 端存取 Excel 檔案的利器:NPOI Library
http://msdn.microsoft.com/zh-tw/ee818993.aspx
小弟將其中的函式改寫應用,歡迎自由散布修改,有空將不定期改寫。
請於aspx.cs引用
using NPOI.HSSF.UserModel;
請於aspx.vb引用
Imports NPOI.HSSF.UserModel;
輸出格式主要有兩種:
客戶端(Client):將資料轉成位元流(Stream)後,在網頁中下載。
MemoryStream ms2 = ExcelUtility.SetFormula(ExcelUtility.RenderDataTableToExcel(table),0,"cos(5)+sin(10)",0,0) as MemoryStream;
// // 設定強制下載標頭。
Response.AddHeader("Content-Disposition", string.Format("attachment; filename=Download.txt"));
// 輸出檔案。
Response.BinaryWrite(ms.ToArray());
主機端(Server);將資料轉成檔案(File)後,存在主機。
MemoryStream ms2 = ExcelUtility.SetFormula(ExcelUtility.RenderDataTableToExcel(table),0,"cos(5)+sin(10)",0,0) as MemoryStream;
//將資料輸出到主機的檔案aaa.xls
ExcelUtility.SetGridLine(Server.MapPath("./aaa.xls"), ms2, false, new int[] { 0 });
函式說明:
public static Stream RenderDataTableToExcel(DataTable SourceTable)
/// 將DataTable轉成Workbook(自定資料型態)輸出.
public static HSSFWorkbook RenderDataTableToWorkBook(DataTable SourceTable)
/// 將DataTable資料輸出成檔案.
public static void RenderDataTableToExcel(DataTable SourceTable, string FileName)
/// 從位元流讀取資料到DataTable.
public static DataTable RenderDataTableFromExcel(Stream ExcelFileStream, string SheetName, int HeaderRowIndex, bool HaveHeader)
/// 從位元流讀取資料到DataTable.
public static DataTable RenderDataTableFromExcel(Stream ExcelFileStream, int SheetIndex, int HeaderRowIndex, bool HaveHeader)
/// 將陣列輸出成位元流.
public static Stream RenderArrayToExcel(string ColumnName, string[,] SourceTable)
/// 將陣列輸出成檔案.
public static void RenderArrayToExcel(string FileName, string ColumnName, string[,] SourceTable)
/// 將陣列輸出成WorkBook(自訂資料型態).
public static HSSFWorkbook RenderArrayToWorkBook(string ColumnName, string[,] SourceTable)
/// 將位元流資料輸出成陣列.
public static string[,] RenderArrayFromExcel(Stream ExcelFileStream, string SheetName, int HeaderRowIndex, bool HaveHeader)
/// 將位元流資料輸出成陣列.
public static string[,] RenderArrayFromExcel(Stream ExcelFileStream, int SheetIndex, int HeaderRowIndex, bool HaveHeader)
/// 在位元流儲存格中建立超連結.
public static Stream MakeLink(Stream InputStream, string SheetNameOrIndex, string LinkName, string LinkValueOrIndex, LinkType s1, int RowIndex, int CellIndex)
/// 在檔案儲存格中建立超連結.
public static void MakeLink(string FileName, Stream InputStream, string SheetNameOrIndex, string LinkName, string LinkValueOrIndex, LinkType s1, int RowIndex, int CellIndex)
/// 建立新位元流並在儲存格中建立超連結.
public static Stream MakeLinkFromEmpty(string SheetNameOrIndex, string LinkName, string LinkValueOrIndex, LinkType s1, int RowIndex, int CellIndex)
/// 建立新檔案並在儲存格中建立超連結.
public static void MakeLinkFromEmpty(string FileName, string SheetNameOrIndex, string LinkName, string LinkValueOrIndex, LinkType s1, int RowIndex, int CellIndex)
/// 設定字體顏色大小到位元流.
public static Stream ApplyStyleToFile(Stream InputStream, string FontName, short FontSize, bool IsAllSheet, params string[] SheetName)
/// 設定字體顏色大小到位元流.
public static Stream ApplyStyleToFile(Stream InputStream, string FontName, short FontSize, bool IsAllSheet, params int[] SheetIndex)
/// 設定字體顏色大小到檔案.
public static void ApplyStyleToFile(string FileName, Stream InputStream, string FontName, short FontSize, bool IsAllSheet, params string[] SheetName)
/// 設定字體顏色大小到檔案.
public static void ApplyStyleToFile(string FileName, Stream InputStream, string FontName, short FontSize, bool IsAllSheet, params int[] SheetIndex)
/// 建立空白excel檔到位元流.
public static Stream CreateEmptyFile(params string[] SheetName)
/// 建立空白excel檔到檔案.
public static void CreateEmptyFile(string FileName, params string[] SheetName)
/// 設定格線到位元流.
public static Stream SetGridLine(Stream InputSteam, bool haveGridLine, params string[] SheetName)
/// 設定格線到位元流.
public static Stream SetGridLine(Stream InputSteam, bool haveGridLine, params int[] SheetIndex)
/// 設定格線到檔案.
public static void SetGridLine(string FileName, Stream InputSteam, bool haveGridLine, params int[] SheetIndex)
/// 設定格線到檔案.
public static void SetGridLine(string FileName, Stream InputSteam, bool haveGridLine, params string[] SheetName)
/// 從位元流將資料轉成字串輸出
public static string ExtractStringFromFileStream(Stream InputStream)
/// 從檔案將資料轉成字串輸出
public static string ExtractStringFromFileStream(string FileName)
/// 設定群組到位元流.
public static Stream CreateGroup(string SheetName, bool IsRow, int From, int End)
/// 建立群組到檔案.
public static void CreateGroup(string FileName,string SheetName, bool IsRow, int From, int End)
/// 從樣板建立位元流.
public static Stream CreateFileStreamFromTemplate(string TemplateFileName)
/// 從樣板建立檔案.
public static void CreateFileFromTemplate(string TemplateFileName,string OutputFileName)
/// 嵌入圖片到位元流.
public static Stream EmbedImage(Stream InputStream,int SheetIndex,string PicFileName, bool IsOriginalSize , int[] RowPosition)
/// 嵌入圖片到檔案.
public static void EmbedImage(string FileName, int SheetIndex, Stream InputStream, string PicFileName, bool IsOriginalSize, int[] RowPosition)
/// 建立新位元流並嵌入圖片.
public static Stream EmbedImage(string PicFileName, bool IsOriginalSize, int[] RowPosition)
/// 建立新檔案並嵌入圖片.
public static void EmbedImage(string ExcelFileName, string PicFileName, bool IsOriginalSize, int[] RowPosition)
/// 合併儲存格於位元流.
public static Stream MergeCell(Stream InputStream, int SheetIndex, int RowFrom, int ColumnFrom, int RowTo, int ColumnTo)
/// 合併儲存格於檔案.
public static void MergeCell(string FileName, Stream InputStream, int SheetIndex, int RowFrom, int ColumnFrom, int RowTo, int ColumnTo)
/// 建立新位元流並合併儲存格.
public static Stream MergeCell(int RowFrom, int ColumnFrom, int RowTo, int ColumnTo)
/// 建立新檔案並合併儲存格.
public static void MergeCell(string FileName , int RowFrom, int ColumnFrom, int RowTo, int ColumnTo)
/// 設定儲存格公式於位元流.
public static Stream SetFormula(Stream InputStream,int SheetIndex , string Formula, int RowIndex, int ColumnIndex)
/// 設定儲存格公式於檔案.
public static void SetFormula(string FileName,Stream InputStream, int SheetIndex, string Formula, int RowIndex, int ColumnIndex)
/// 建立新位元流並設定儲存格公式.
public static Stream SetFormula(string Formula, int RowIndex, int ColumnIndex)
/// 建立新檔案並設定儲存格公式.
public static void SetFormula(string FileName, string Formula, int RowIndex, int ColumnIndex)
以下為程序碼
定義及初始化
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Web;
using NPOI;
using NPOI.HPSF;
using NPOI.HSSF;
using NPOI.HSSF.UserModel;
using NPOI.POIFS;
using NPOI.Util;
using NPOI.HSSF.Util;
using NPOI.HSSF.Extractor;
using System.Web.UI.HtmlControls;
public static class ExcelUtility
{
public static HSSFWorkbook workbook;
[Flags]
public enum LinkType
{
網址,
檔案,
郵件,
內文
};
public static void InitializeWorkbook()
{
////create a entry of DocumentSummaryInformation
if (workbook == null)
workbook = new HSSFWorkbook();
//HSSFFont font1 = workbook.CreateFont();
//HSSFCellStyle Style = workbook.CreateCellStyle();
//font1.FontHeightInPoints = 10;
//font1.FontName = "新細明體";
//Style.SetFont(font1);
//for (int i = 0; i < workbook.NumberOfSheets; i++)
//{
// HSSFSheet Sheets = workbook.GetSheetAt(0);
// for (int k = Sheets.FirstRowNum; k <= Sheets.LastRowNum; k++)
// {
// HSSFRow row = Sheets.GetRow(k);
// for (int l = row.FirstCellNum; l < row.LastCellNum; l++)
// {
// HSSFCell Cell = row.GetCell(l);
// Cell.CellStyle = Style;
// }
// }
//}
DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
dsi.Company = "測試公司";
workbook.DocumentSummaryInformation = dsi;
////create a entry of SummaryInformation
SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
si.Subject = "測試公司Excel檔案";
si.Title = "測試公司Excel檔案";
si.Author = "killysss";
si.Comments = "謝謝您的使用!";
workbook.SummaryInformation = si;
}
Excel檔案資訊及相關應用
public static string GetCellPosition(int row, int col)
{
col = Convert.ToInt32('A') + col;
row = row + 1;
return ((char)col) + row.ToString();
}
#endregion
資料形態轉換
public static void WriteSteamToFile(MemoryStream ms, string FileName)
{
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;
}
public static void WriteSteamToFile(byte[] data, string FileName)
{
FileStream fs = new FileStream(FileName, FileMode.Create, FileAccess.Write);
fs.Write(data, 0, data.Length);
fs.Flush();
fs.Close();
data = null;
fs = null;
}
public static Stream WorkBookToStream(HSSFWorkbook InputWorkBook)
{
MemoryStream ms = new MemoryStream();
InputWorkBook.Write(ms);
ms.Flush();
ms.Position = 0;
return ms;
}
public static HSSFWorkbook StreamToWorkBook(Stream InputStream)
{
HSSFWorkbook WorkBook = new HSSFWorkbook(InputStream);
return WorkBook;
}
public static HSSFWorkbook MemoryStreamToWorkBook(MemoryStream InputStream)
{
HSSFWorkbook WorkBook = new HSSFWorkbook(InputStream as Stream);
return WorkBook;
}
public static MemoryStream WorkBookToMemoryStream(HSSFWorkbook InputStream)
{
//Write the stream data of workbook to the root directory
MemoryStream file = new MemoryStream();
InputStream.Write(file);
return file;
}
public static Stream FileToStream(string FileName)
{
FileInfo fi = new FileInfo(FileName);
if (fi.Exists == true)
{
FileStream fs = new FileStream(FileName, FileMode.Open, FileAccess.Read);
return fs;
}
else return null;
}
public static Stream MemoryStreamToStream(MemoryStream ms)
{
return ms as Stream;
}
#endregion
DataTable與Excel資料格式轉換
/// <summary>
/// 將DataTable轉成Stream輸出.
/// </summary>
/// <param name="SourceTable">The source table.</param>
/// <returns></returns>
public static Stream RenderDataTableToExcel(DataTable SourceTable)
{
workbook = new HSSFWorkbook();
InitializeWorkbook();
MemoryStream ms = new MemoryStream();
HSSFSheet sheet = workbook.CreateSheet();
HSSFRow 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)
{
HSSFRow 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轉成Workbook(自定資料型態)輸出.
/// </summary>
/// <param name="SourceTable">The source table.</param>
/// <returns></returns>
public static HSSFWorkbook RenderDataTableToWorkBook(DataTable SourceTable)
{
workbook = new HSSFWorkbook();
InitializeWorkbook();
MemoryStream ms = new MemoryStream();
HSSFSheet sheet = workbook.CreateSheet();
HSSFRow 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)
{
HSSFRow dataRow = sheet.CreateRow(rowIndex);
foreach (DataColumn column in SourceTable.Columns)
{
dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());
}
rowIndex++;
}
return workbook;
}
/// <summary>
/// 將DataTable資料輸出成檔案.
/// </summary>
/// <param name="SourceTable">The source table.</param>
/// <param name="FileName">Name of the file.</param>
public static void RenderDataTableToExcel(DataTable SourceTable, string FileName)
{
MemoryStream ms = RenderDataTableToExcel(SourceTable) as MemoryStream;
WriteSteamToFile(ms, FileName);
}
/// <summary>
/// 從位元流讀取資料到DataTable.
/// </summary>
/// <param name="ExcelFileStream">The excel file stream.</param>
/// <param name="SheetName">Name of the sheet.</param>
/// <param name="HeaderRowIndex">Index of the header row.</param>
/// <param name="HaveHeader">if set to <c>true</c> [have header].</param>
/// <returns></returns>
public static DataTable RenderDataTableFromExcel(Stream ExcelFileStream, string SheetName, int HeaderRowIndex, bool HaveHeader)
{
workbook = new HSSFWorkbook(ExcelFileStream);
InitializeWorkbook();
HSSFSheet sheet = workbook.GetSheet(SheetName);
DataTable table = new DataTable();
HSSFRow headerRow = sheet.GetRow(HeaderRowIndex);
int cellCount = headerRow.LastCellNum;
for (int i = headerRow.FirstCellNum; i < cellCount; i++)
{
string ColumnName = (HaveHeader == true) ? headerRow.GetCell(i).StringCellValue : "f" + i.ToString();
DataColumn column = new DataColumn(ColumnName);
table.Columns.Add(column);
}
int rowCount = sheet.LastRowNum;
int RowStart = (HaveHeader == true) ? sheet.FirstRowNum + 1 : sheet.FirstRowNum;
for (int i = RowStart; i <= sheet.LastRowNum; i++)
{
HSSFRow 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>
/// 從位元流讀取資料到DataTable.
/// </summary>
/// <param name="ExcelFileStream">The excel file stream.</param>
/// <param name="SheetIndex">Index of the sheet.</param>
/// <param name="HeaderRowIndex">Index of the header row.</param>
/// <param name="HaveHeader">if set to <c>true</c> [have header].</param>
/// <returns></returns>
public static DataTable RenderDataTableFromExcel(Stream ExcelFileStream, int SheetIndex, int HeaderRowIndex, bool HaveHeader)
{
workbook = new HSSFWorkbook(ExcelFileStream);
InitializeWorkbook();
HSSFSheet sheet = workbook.GetSheetAt(SheetIndex);
DataTable table = new DataTable();
HSSFRow headerRow = sheet.GetRow(HeaderRowIndex);
int cellCount = headerRow.LastCellNum;
for (int i = headerRow.FirstCellNum; i < cellCount; i++)
{
string ColumnName = (HaveHeader == true) ? headerRow.GetCell(i).StringCellValue : "f" + i.ToString();
DataColumn column = new DataColumn(ColumnName);
table.Columns.Add(column);
}
int rowCount = sheet.LastRowNum;
int RowStart = (HaveHeader == true) ? sheet.FirstRowNum + 1 : sheet.FirstRowNum;
for (int i = RowStart; i <= sheet.LastRowNum; i++)
{
HSSFRow 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
字串陣列與Excel資料格式轉換
/// <summary>
/// 建立datatable
/// </summary>
/// <param name="ColumnName">欄位名用逗號分隔</param>
/// <param name="value">data陣列 , rowmajor</param>
/// <returns>DataTable</returns>
public static DataTable CreateDataTable(string ColumnName, string[,] value)
{
/* 輸入範例
string cname = " name , sex ";
string[,] aaz = new string[4, 2];
for (int q = 0; q < 4; q++)
for (int r = 0; r < 2; r++)
aaz[q, r] = "1";
dataGridView1.DataSource = NewMediaTest1.Model.Utility.DataSetUtil.CreateDataTable(cname, aaz);
*/
int i, j;
DataTable ResultTable = new DataTable();
string[] sep = new string[] { "," };
string[] TempColName = ColumnName.Split(sep, StringSplitOptions.RemoveEmptyEntries);
DataColumn[] CName = new DataColumn[TempColName.Length];
for (i = 0; i < TempColName.Length; i++)
{
DataColumn c1 = new DataColumn(TempColName[i].ToString().Trim(), typeof(object));
ResultTable.Columns.Add(c1);
}
if (value != null)
{
for (i = 0; i < value.GetLength(0); i++)
{
DataRow newrow = ResultTable.NewRow();
for (j = 0; j < TempColName.Length; j++)
{
newrow[j] = string.Copy(value[i, j].ToString());
}
ResultTable.Rows.Add(newrow);
}
}
return ResultTable;
}
/// <summary>
/// Creates the string array.
/// </summary>
/// <param name="dt">The dt.</param>
/// <returns></returns>
public static string[,] CreateStringArray(DataTable dt)
{
int ColumnNum = dt.Columns.Count;
int RowNum = dt.Rows.Count;
string[,] result = new string[RowNum, ColumnNum];
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
result[i, j] = string.Copy(dt.Rows[i][j].ToString());
}
}
return result;
}
/// <summary>
/// 將陣列輸出成位元流.
/// </summary>
/// <param name="ColumnName">Name of the column.</param>
/// <param name="SourceTable">The source table.</param>
/// <returns></returns>
public static Stream RenderArrayToExcel(string ColumnName, string[,] SourceTable)
{
DataTable dt = CreateDataTable(ColumnName, SourceTable);
return RenderDataTableToExcel(dt);
}
/// <summary>
/// 將陣列輸出成檔案.
/// </summary>
/// <param name="FileName">Name of the file.</param>
/// <param name="ColumnName">Name of the column.</param>
/// <param name="SourceTable">The source table.</param>
public static void RenderArrayToExcel(string FileName, string ColumnName, string[,] SourceTable)
{
DataTable dt = CreateDataTable(ColumnName, SourceTable);
RenderDataTableToExcel(dt, FileName);
}
/// <summary>
/// 將陣列輸出成WorkBook(自訂資料型態).
/// </summary>
/// <param name="ColumnName">Name of the column.</param>
/// <param name="SourceTable">The source table.</param>
/// <returns></returns>
public static HSSFWorkbook RenderArrayToWorkBook(string ColumnName, string[,] SourceTable)
{
DataTable dt = CreateDataTable(ColumnName, SourceTable);
return RenderDataTableToWorkBook(dt);
}
/// <summary>
/// 將位元流資料輸出成陣列.
/// </summary>
/// <param name="ExcelFileStream">The excel file stream.</param>
/// <param name="SheetName">Name of the sheet.</param>
/// <param name="HeaderRowIndex">Index of the header row.</param>
/// <param name="HaveHeader">if set to <c>true</c> [have header].</param>
/// <returns></returns>
public static string[,] RenderArrayFromExcel(Stream ExcelFileStream, string SheetName, int HeaderRowIndex, bool HaveHeader)
{
workbook = new HSSFWorkbook(ExcelFileStream);
InitializeWorkbook();
HSSFSheet sheet = workbook.GetSheet(SheetName);
DataTable table = new DataTable();
HSSFRow 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;
int RowStart = (HaveHeader == true) ? sheet.FirstRowNum + 1 : sheet.FirstRowNum;
for (int i = RowStart; i <= sheet.LastRowNum; i++)
{
HSSFRow 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 CreateStringArray(table);
}
/// <summary>
/// 將位元流資料輸出成陣列.
/// </summary>
/// <param name="ExcelFileStream">The excel file stream.</param>
/// <param name="SheetIndex">Index of the sheet.</param>
/// <param name="HeaderRowIndex">Index of the header row.</param>
/// <param name="HaveHeader">if set to <c>true</c> [have header].</param>
/// <returns></returns>
public static string[,] RenderArrayFromExcel(Stream ExcelFileStream, int SheetIndex, int HeaderRowIndex, bool HaveHeader)
{
workbook = new HSSFWorkbook(ExcelFileStream);
InitializeWorkbook();
HSSFSheet sheet = workbook.GetSheetAt(SheetIndex);
DataTable table = new DataTable();
HSSFRow 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;
int RowStart = (HaveHeader == true) ? sheet.FirstRowNum + 1 : sheet.FirstRowNum;
for (int i = RowStart; i <= sheet.LastRowNum; i++)
{
HSSFRow 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 CreateStringArray(table);
}
#endregion
超連結
/// <summary>
/// 在位元流儲存格中建立超連結.
/// </summary>
/// <param name="InputStream">The input stream.</param>
/// <param name="SheetNameOrIndex">Index of the sheet name or.</param>
/// <param name="LinkName">Name of the link.</param>
/// <param name="LinkValueOrIndex">Index of the link value or.</param>
/// <param name="s1">The s1.</param>
/// <param name="RowIndex">Index of the row.</param>
/// <param name="CellIndex">Index of the cell.</param>
/// <returns></returns>
public static Stream MakeLink(Stream InputStream, string SheetNameOrIndex, string LinkName, string LinkValueOrIndex, LinkType s1, int RowIndex, int CellIndex)
{
workbook = new HSSFWorkbook(InputStream);
//HSSFSheet sheet = hssfworkbook.CreateSheet("Hyperlinks");
////cell style for hyperlinks
////by default hyperlinks are blue and underlined
InitializeWorkbook();
MemoryStream ms = new MemoryStream();
HSSFCellStyle hlink_style = workbook.CreateCellStyle();
HSSFFont hlink_font = workbook.CreateFont();
hlink_font.Underline = HSSFFont.U_SINGLE;
hlink_font.Color = HSSFColor.BLUE.index;
hlink_style.SetFont(hlink_font);
string ResultLinkValue = string.Empty;
int ResultSheet;
HSSFSheet sheet;
if (int.TryParse(SheetNameOrIndex, out ResultSheet) == true)
sheet = workbook.GetSheetAt(ResultSheet);
else
sheet = workbook.GetSheet(SheetNameOrIndex);
HSSFCell cell = sheet.CreateRow(RowIndex).CreateCell(CellIndex);
cell.SetCellValue(LinkName);
HSSFHyperlink link;
switch (s1.ToString())
{
case "網址": link = new HSSFHyperlink(HSSFHyperlink.LINK_URL);
ResultLinkValue = string.Copy(LinkValueOrIndex);
break;
case "檔案": link = new HSSFHyperlink(HSSFHyperlink.LINK_FILE);
ResultLinkValue = string.Copy(LinkValueOrIndex);
break;
case "郵件": link = new HSSFHyperlink(HSSFHyperlink.LINK_EMAIL);
// ResultLinkValue = string.Copy(LinkValue);
ResultLinkValue = "mailto:" + LinkValueOrIndex;
break;
case "內文":
int result;
link = new HSSFHyperlink(HSSFHyperlink.LINK_DOCUMENT);
if (int.TryParse(LinkValueOrIndex, out result) == true)
ResultLinkValue = "'" + workbook.GetSheetName(result) + "'!A1";
else
ResultLinkValue = "'" + LinkValueOrIndex + "'!A1";
break;
default: link = new HSSFHyperlink(HSSFHyperlink.LINK_URL);
break;
}
link.Address = (ResultLinkValue);
cell.Hyperlink = (link);
cell.CellStyle = (hlink_style);
workbook.Write(ms);
ms.Flush();
return ms;
}
/// <summary>
/// 在檔案儲存格中建立超連結.
/// </summary>
/// <param name="FileName">Name of the file.</param>
/// <param name="InputStream">The input stream.</param>
/// <param name="SheetNameOrIndex">Index of the sheet name or.</param>
/// <param name="LinkName">Name of the link.</param>
/// <param name="LinkValueOrIndex">Index of the link value or.</param>
/// <param name="s1">The s1.</param>
/// <param name="RowIndex">Index of the row.</param>
/// <param name="CellIndex">Index of the cell.</param>
public static void MakeLink(string FileName, Stream InputStream, string SheetNameOrIndex, string LinkName, string LinkValueOrIndex, LinkType s1, int RowIndex, int CellIndex)
{
MemoryStream ms = MakeLink(InputStream, SheetNameOrIndex, LinkName, LinkValueOrIndex, s1, RowIndex, CellIndex) as MemoryStream;
WriteSteamToFile(ms, FileName);
}
/// <summary>
/// 建立新位元流並在儲存格中建立超連結.
/// </summary>
/// <param name="SheetNameOrIndex">Index of the sheet name or.</param>
/// <param name="LinkName">Name of the link.</param>
/// <param name="LinkValueOrIndex">Index of the link value or.</param>
/// <param name="s1">The s1.</param>
/// <param name="RowIndex">Index of the row.</param>
/// <param name="CellIndex">Index of the cell.</param>
/// <returns></returns>
public static Stream MakeLinkFromEmpty(string SheetNameOrIndex, string LinkName, string LinkValueOrIndex, LinkType s1, int RowIndex, int CellIndex)
{
workbook = new HSSFWorkbook();
HSSFSheet sheet1 = workbook.CreateSheet();
//HSSFSheet sheet = hssfworkbook.CreateSheet("Hyperlinks");
////cell style for hyperlinks
////by default hyperlinks are blue and underlined
InitializeWorkbook();
MemoryStream ms = new MemoryStream();
HSSFCellStyle hlink_style = workbook.CreateCellStyle();
HSSFFont hlink_font = workbook.CreateFont();
hlink_font.Underline = HSSFFont.U_SINGLE;
hlink_font.Color = HSSFColor.BLUE.index;
hlink_style.SetFont(hlink_font);
string ResultLinkValue = string.Empty;
int ResultSheet;
HSSFSheet sheet;
if (int.TryParse(SheetNameOrIndex, out ResultSheet) == true)
sheet = workbook.GetSheetAt(ResultSheet);
else
sheet = workbook.GetSheet(SheetNameOrIndex);
HSSFCell cell = sheet.CreateRow(RowIndex).CreateCell(CellIndex);
cell.SetCellValue(LinkName);
HSSFHyperlink link;
switch (s1.ToString())
{
case "網址": link = new HSSFHyperlink(HSSFHyperlink.LINK_URL);
ResultLinkValue = string.Copy(LinkValueOrIndex);
break;
case "檔案": link = new HSSFHyperlink(HSSFHyperlink.LINK_FILE);
ResultLinkValue = string.Copy(LinkValueOrIndex);
break;
case "郵件": link = new HSSFHyperlink(HSSFHyperlink.LINK_EMAIL);
// ResultLinkValue = string.Copy(LinkValue);
ResultLinkValue = "mailto:" + LinkValueOrIndex;
break;
case "內文":
int result;
link = new HSSFHyperlink(HSSFHyperlink.LINK_DOCUMENT);
if (int.TryParse(LinkValueOrIndex, out result) == true)
ResultLinkValue = "'" + workbook.GetSheetName(result) + "'!A1";
else
ResultLinkValue = "'" + LinkValueOrIndex + "'!A1";
break;
default: link = new HSSFHyperlink(HSSFHyperlink.LINK_URL);
break;
}
link.Address = (ResultLinkValue);
cell.Hyperlink = (link);
cell.CellStyle = (hlink_style);
workbook.Write(ms);
ms.Flush();
return ms;
}
/// <summary>
/// 建立新檔案並在儲存格中建立超連結.
/// </summary>
/// <param name="FileName">Name of the file.</param>
/// <param name="SheetNameOrIndex">Index of the sheet name or.</param>
/// <param name="LinkName">Name of the link.</param>
/// <param name="LinkValueOrIndex">Index of the link value or.</param>
/// <param name="s1">The s1.</param>
/// <param name="RowIndex">Index of the row.</param>
/// <param name="CellIndex">Index of the cell.</param>
public static void MakeLinkFromEmpty(string FileName, string SheetNameOrIndex, string LinkName, string LinkValueOrIndex, LinkType s1, int RowIndex, int CellIndex)
{
MemoryStream ms = MakeLinkFromEmpty(SheetNameOrIndex, LinkName, LinkValueOrIndex, s1, RowIndex, CellIndex) as MemoryStream;
WriteSteamToFile(ms, FileName);
}
#endregion
設定字體字形
public static HSSFCellStyle SetCellStyle(HSSFFont InputFont)
{
InitializeWorkbook();
HSSFCellStyle style1 = workbook.CreateCellStyle();
style1.SetFont(InputFont);
return style1;
}
/// <summary>
/// 設定字體顏色大小到位元流.
/// </summary>
/// <param name="InputStream">The input stream.</param>
/// <param name="FontName">Name of the font.</param>
/// <param name="FontSize">Size of the font.</param>
/// <param name="IsAllSheet">if set to <c>true</c> [is all sheet].</param>
/// <param name="SheetName">Name of the sheet.</param>
/// <returns></returns>
public static Stream ApplyStyleToFile(Stream InputStream, string FontName, short FontSize, bool IsAllSheet, params string[] SheetName)
{
workbook = new HSSFWorkbook(InputStream);
InitializeWorkbook();
HSSFFont font = workbook.CreateFont();
HSSFCellStyle Style = workbook.CreateCellStyle();
font.FontHeightInPoints = FontSize;
font.FontName = FontName;
Style.SetFont(font);
MemoryStream ms = new MemoryStream();
int i;
if (IsAllSheet == true)
{
for (i = 0; i < workbook.NumberOfSheets; i++)
{
HSSFSheet Sheets = workbook.GetSheetAt(0);
for (int k = Sheets.FirstRowNum; k <= Sheets.LastRowNum; k++)
{
HSSFRow row = Sheets.GetRow(k);
for (int l = row.FirstCellNum; l < row.LastCellNum; l++)
{
HSSFCell Cell = row.GetCell(l);
Cell.CellStyle = Style;
}
}
}
}
else
{
for (i = 0; i < SheetName.Length; i++)
{
HSSFSheet Sheets = workbook.GetSheet(SheetName[i]);
for (int k = Sheets.FirstRowNum; k <= Sheets.LastRowNum; k++)
{
HSSFRow row = Sheets.GetRow(k);
for (int l = row.FirstCellNum; l < row.LastCellNum; l++)
{
HSSFCell Cell = row.GetCell(l);
Cell.CellStyle = Style;
}
}
}
}
workbook.Write(ms);
ms.Flush();
return ms;
}
/// <summary>
/// 設定字體顏色大小到位元流.
/// </summary>
/// <param name="InputStream">The input stream.</param>
/// <param name="FontName">Name of the font.</param>
/// <param name="FontSize">Size of the font.</param>
/// <param name="IsAllSheet">if set to <c>true</c> [is all sheet].</param>
/// <param name="SheetIndex">Index of the sheet.</param>
/// <returns></returns>
public static Stream ApplyStyleToFile(Stream InputStream, string FontName, short FontSize, bool IsAllSheet, params int[] SheetIndex)
{
workbook = new HSSFWorkbook(InputStream);
InitializeWorkbook();
MemoryStream ms = new MemoryStream();
HSSFFont font = workbook.CreateFont();
HSSFCellStyle Style = workbook.CreateCellStyle();
font.FontHeightInPoints = FontSize;
font.FontName = FontName;
Style.SetFont(font);
int i;
if (IsAllSheet == true)
{
for (i = 0; i < workbook.NumberOfSheets; i++)
{
HSSFSheet Sheets = workbook.GetSheetAt(0);
for (int k = Sheets.FirstRowNum; k <= Sheets.LastRowNum; k++)
{
HSSFRow row = Sheets.GetRow(k);
for (int l = row.FirstCellNum; l < row.LastCellNum; l++)
{
HSSFCell Cell = row.GetCell(l);
Cell.CellStyle = Style;
}
}
}
}
else
{
for (i = 0; i < SheetIndex.Length; i++)
{
HSSFSheet Sheets = workbook.GetSheetAt(SheetIndex[i]);
for (int k = Sheets.FirstRowNum; k <= Sheets.LastRowNum; k++)
{
HSSFRow row = Sheets.GetRow(k);
for (int l = row.FirstCellNum; l < row.LastCellNum; l++)
{
HSSFCell Cell = row.GetCell(l);
Cell.CellStyle = Style;
}
}
}
}
workbook.Write(ms);
ms.Flush();
return ms;
}
/// <summary>
/// 設定字體顏色大小到檔案.
/// </summary>
/// <param name="FileName">Name of the file.</param>
/// <param name="InputStream">The input stream.</param>
/// <param name="FontName">Name of the font.</param>
/// <param name="FontSize">Size of the font.</param>
/// <param name="IsAllSheet">if set to <c>true</c> [is all sheet].</param>
/// <param name="SheetName">Name of the sheet.</param>
public static void ApplyStyleToFile(string FileName, Stream InputStream, string FontName, short FontSize, bool IsAllSheet, params string[] SheetName)
{
MemoryStream ms = ApplyStyleToFile(InputStream, FontName, FontSize, IsAllSheet, SheetName) as MemoryStream;
WriteSteamToFile(ms, FileName);
}
/// <summary>
/// 設定字體顏色大小到檔案.
/// </summary>
/// <param name="FileName">Name of the file.</param>
/// <param name="InputStream">The input stream.</param>
/// <param name="FontName">Name of the font.</param>
/// <param name="FontSize">Size of the font.</param>
/// <param name="IsAllSheet">if set to <c>true</c> [is all sheet].</param>
/// <param name="SheetIndex">Index of the sheet.</param>
public static void ApplyStyleToFile(string FileName, Stream InputStream, string FontName, short FontSize, bool IsAllSheet, params int[] SheetIndex)
{
MemoryStream ms = ApplyStyleToFile(InputStream, FontName, FontSize, IsAllSheet, SheetIndex) as MemoryStream;
WriteSteamToFile(ms, FileName);
}
#endregion
建立空白excel檔
/// <summary>
/// 建立空白excel檔到位元流.
/// </summary>
/// <param name="SheetName">Name of the sheet.</param>
/// <returns></returns>
public static Stream CreateEmptyFile(params string[] SheetName)
{
MemoryStream ms = new MemoryStream();
workbook = new HSSFWorkbook();
InitializeWorkbook();
if (SheetName == null)
{
workbook.CreateSheet();
}
else
{
foreach (string temp in SheetName)
workbook.CreateSheet(temp);
}
workbook.Write(ms);
ms.Flush();
return ms;
}
/// <summary>
/// 建立空白excel檔到檔案.
/// </summary>
/// <param name="FileName">Name of the file.</param>
/// <param name="SheetName">Name of the sheet.</param>
public static void CreateEmptyFile(string FileName, params string[] SheetName)
{
MemoryStream ms = CreateEmptyFile(SheetName) as MemoryStream;
WriteSteamToFile(ms, FileName);
}
#endregion
設定格線
/// <summary>
/// 設定格線到位元流.
/// </summary>
/// <param name="InputSteam">The input steam.</param>
/// <param name="haveGridLine">if set to <c>true</c> [have grid line].</param>
/// <param name="SheetName">Name of the sheet.</param>
/// <returns></returns>
public static Stream SetGridLine(Stream InputSteam, bool haveGridLine, params string[] SheetName)
{
workbook = new HSSFWorkbook(InputSteam);
InitializeWorkbook();
MemoryStream ms = new MemoryStream();
if (SheetName == null)
{
for (int i = 0; i < workbook.NumberOfSheets; i++)
{
HSSFSheet s1 = workbook.GetSheetAt(i);
s1.DisplayGridlines = haveGridLine;
}
}
else
{
foreach (string TempSheet in SheetName)
{
HSSFSheet s1 = workbook.GetSheet(TempSheet);
s1.DisplayGridlines = haveGridLine;
}
}
workbook.Write(ms);
ms.Flush();
return ms;
}
/// <summary>
/// 設定格線到位元流.
/// </summary>
/// <param name="InputSteam">The input steam.</param>
/// <param name="haveGridLine">if set to <c>true</c> [have grid line].</param>
/// <param name="SheetIndex">Index of the sheet.</param>
/// <returns></returns>
public static Stream SetGridLine(Stream InputSteam, bool haveGridLine, params int[] SheetIndex)
{
workbook = new HSSFWorkbook(InputSteam);
InitializeWorkbook();
MemoryStream ms = new MemoryStream();
if (SheetIndex == null)
{
for (int i = 0; i < workbook.NumberOfSheets; i++)
{
HSSFSheet s1 = workbook.GetSheetAt(i);
s1.DisplayGridlines = haveGridLine;
}
}
else
{
foreach (int TempSheet in SheetIndex)
{
HSSFSheet s1 = workbook.GetSheetAt(TempSheet);
s1.DisplayGridlines = haveGridLine;
}
}
workbook.Write(ms);
ms.Flush();
return ms;
}
/// <summary>
/// 設定格線到檔案.
/// </summary>
/// <param name="FileName">Name of the file.</param>
/// <param name="InputSteam">The input steam.</param>
/// <param name="haveGridLine">if set to <c>true</c> [have grid line].</param>
/// <param name="SheetIndex">Index of the sheet.</param>
public static void SetGridLine(string FileName, Stream InputSteam, bool haveGridLine, params int[] SheetIndex)
{
MemoryStream ms = SetGridLine(InputSteam, haveGridLine, SheetIndex) as MemoryStream;
WriteSteamToFile(ms, FileName);
}
/// <summary>
/// 設定格線到檔案.
/// </summary>
/// <param name="FileName">Name of the file.</param>
/// <param name="InputSteam">The input steam.</param>
/// <param name="haveGridLine">if set to <c>true</c> [have grid line].</param>
/// <param name="SheetName">Name of the sheet.</param>
public static void SetGridLine(string FileName, Stream InputSteam, bool haveGridLine, params string[] SheetName)
{
MemoryStream ms = SetGridLine(InputSteam, haveGridLine, SheetName) as MemoryStream;
WriteSteamToFile(ms, FileName);
}
#endregion
擷取字串從excel檔案
/// <summary>
/// 從位元流將資料轉成字串輸出
/// </summary>
/// <param name="InputStream">The input stream.</param>
/// <returns></returns>
public static string ExtractStringFromFileStream(Stream InputStream)
{
HSSFWorkbook HBook = new HSSFWorkbook(InputStream);
ExcelExtractor extractor = new ExcelExtractor(HBook);
return extractor.Text;
}
/// <summary>
/// 從檔案將資料轉成字串輸出
/// </summary>
/// <param name="FileName">Name of the file.</param>
/// <returns></returns>
public static string ExtractStringFromFileStream(string FileName)
{
FileInfo fi = new FileInfo(FileName);
if (fi.Exists == true)
{
using (FileStream fs = fi.Open(FileMode.Open))
{
HSSFWorkbook HBook = new HSSFWorkbook(fs);
ExcelExtractor extractor = new ExcelExtractor(HBook);
return extractor.Text;
}
}
else return null;
}
#endregion
設定群組
/// <summary>
/// 設定群組到位元流.
/// </summary>
/// <param name="SheetName">Name of the sheet.</param>
/// <param name="IsRow">if set to <c>true</c> [is row].</param>
/// <param name="From">From.</param>
/// <param name="End">The end.</param>
/// <returns></returns>
public static Stream CreateGroup(string SheetName, bool IsRow, int From, int End)
{
MemoryStream ms = new MemoryStream();
workbook = new HSSFWorkbook();
InitializeWorkbook();
HSSFSheet sh = workbook.CreateSheet(SheetName);
for (int i = 0; i <= End; i++)
{
sh.CreateRow(i);
}
if (IsRow == true)
sh.GroupRow(From, End);
else
sh.GroupColumn((short)From, (short)End);
workbook.Write(ms);
ms.Flush();
return ms;
}
/// <summary>
/// 建立群組到檔案.
/// </summary>
/// <param name="FileName">Name of the file.</param>
/// <param name="SheetName">Name of the sheet.</param>
/// <param name="IsRow">if set to <c>true</c> [is row].</param>
/// <param name="From">From.</param>
/// <param name="End">The end.</param>
public static void CreateGroup(string FileName,string SheetName, bool IsRow, int From, int End)
{
MemoryStream ms = CreateGroup(SheetName, IsRow, From, End) as MemoryStream;
WriteSteamToFile(ms, FileName);
}
#endregion
從樣板建立檔案
/// <summary>
/// 從樣板建立位元流.
/// </summary>
/// <param name="TemplateFileName">Name of the template file.</param>
/// <returns></returns>
public static Stream CreateFileStreamFromTemplate(string TemplateFileName)
{
FileInfo fi = new FileInfo(TemplateFileName);
if (fi.Exists == true)
{
MemoryStream ms = new MemoryStream();
FileStream file = new FileStream(TemplateFileName, FileMode.Open, FileAccess.Read);
workbook = new HSSFWorkbook(file);
DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
dsi.Company = "測試公司";
workbook.DocumentSummaryInformation = dsi;
////create a entry of SummaryInformation
SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
si.Subject = "測試公司Excel檔案";
si.Title = "測試公司Excel檔案";
si.Author = "killysss";
si.Comments = "謝謝您的使用!";
workbook.SummaryInformation = si;
workbook.Write(ms);
ms.Flush();
return ms;
}
else return null;
}
/// <summary>
/// 從樣板建立檔案.
/// </summary>
/// <param name="TemplateFileName">Name of the template file.</param>
/// <param name="OutputFileName">Name of the output file.</param>
public static void CreateFileFromTemplate(string TemplateFileName,string OutputFileName)
{
FileInfo fi = new FileInfo(TemplateFileName);
if (fi.Exists == true)
{
MemoryStream ms = CreateFileStreamFromTemplate(TemplateFileName) as MemoryStream;
WriteSteamToFile(ms, OutputFileName);
}
else ;
}
#endregion
嵌入圖片
/// <summary>
/// Loads the image.
/// </summary>
/// <param name="path">The path.</param>
/// <param name="wb">The wb.</param>
/// <returns></returns>
public static 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, HSSFWorkbook.PICTURE_TYPE_JPEG);
}
/// <summary>
/// 嵌入圖片到位元流.
/// </summary>
/// <param name="InputStream">The input stream.</param>
/// <param name="SheetIndex">Index of the sheet.</param>
/// <param name="PicFileName">Name of the pic file.</param>
/// <param name="IsOriginalSize">if set to <c>true</c> [is original size].</param>
/// <param name="RowPosition">The row position.</param>
/// <returns></returns>
public static Stream EmbedImage(Stream InputStream,int SheetIndex,string PicFileName, bool IsOriginalSize , int[] RowPosition)
{
workbook = new HSSFWorkbook(InputStream);
InitializeWorkbook();
MemoryStream ms = new MemoryStream();
HSSFSheet sheet1 = workbook.GetSheetAt(SheetIndex);
HSSFPatriarch patriarch = sheet1.CreateDrawingPatriarch();
//create the anchor
HSSFClientAnchor anchor;
anchor = new HSSFClientAnchor(0,0,0,0,
RowPosition[0], RowPosition[1], RowPosition[2], RowPosition[3]);
anchor.AnchorType = 2;
//load the picture and get the picture index in the workbook
HSSFPicture picture = patriarch.CreatePicture(anchor, LoadImage(PicFileName, workbook));
//Reset the image to the original size.
if(IsOriginalSize== true)
picture.Resize();
//Line Style
picture.LineStyle = HSSFPicture.LINESTYLE_NONE;
workbook.Write(ms);
ms.Flush();
return ms;
}
/// <summary>
/// 嵌入圖片到檔案.
/// </summary>
/// <param name="FileName">Name of the file.</param>
/// <param name="SheetIndex">Index of the sheet.</param>
/// <param name="InputStream">The input stream.</param>
/// <param name="PicFileName">Name of the pic file.</param>
/// <param name="IsOriginalSize">if set to <c>true</c> [is original size].</param>
/// <param name="RowPosition">The row position.</param>
public static void EmbedImage(string FileName, int SheetIndex, Stream InputStream, string PicFileName, bool IsOriginalSize, int[] RowPosition)
{
MemoryStream ms = EmbedImage(InputStream, SheetIndex, PicFileName, IsOriginalSize, RowPosition) as MemoryStream;
WriteSteamToFile(ms, FileName);
}
/// <summary>
/// 建立新位元流並嵌入圖片.
/// </summary>
/// <param name="PicFileName">Name of the pic file.</param>
/// <param name="IsOriginalSize">if set to <c>true</c> [is original size].</param>
/// <param name="RowPosition">The row position.</param>
/// <returns></returns>
public static Stream EmbedImage(string PicFileName, bool IsOriginalSize, int[] RowPosition)
{
workbook = new HSSFWorkbook();
InitializeWorkbook();
MemoryStream ms = new MemoryStream();
HSSFSheet sheet1 = workbook.CreateSheet();
HSSFPatriarch patriarch = sheet1.CreateDrawingPatriarch();
//create the anchor
HSSFClientAnchor anchor;
anchor = new HSSFClientAnchor(0, 0, 0, 0,
RowPosition[0], RowPosition[1], RowPosition[2], RowPosition[3]);
anchor.AnchorType = 2;
//load the picture and get the picture index in the workbook
HSSFPicture picture = patriarch.CreatePicture(anchor, LoadImage(PicFileName, workbook));
//Reset the image to the original size.
if (IsOriginalSize == true)
picture.Resize();
//Line Style
picture.LineStyle = HSSFPicture.LINESTYLE_NONE;
workbook.Write(ms);
ms.Flush();
return ms;
}
/// <summary>
/// 建立新檔案並嵌入圖片.
/// </summary>
/// <param name="ExcelFileName">Name of the excel file.</param>
/// <param name="PicFileName">Name of the pic file.</param>
/// <param name="IsOriginalSize">if set to <c>true</c> [is original size].</param>
/// <param name="RowPosition">The row position.</param>
public static void EmbedImage(string ExcelFileName, string PicFileName, bool IsOriginalSize, int[] RowPosition)
{
MemoryStream ms = EmbedImage(PicFileName, IsOriginalSize, RowPosition) as MemoryStream;
WriteSteamToFile(ms, ExcelFileName);
}
#endregion
合併儲存格
/// <summary>
/// 合併儲存格於位元流.
/// </summary>
/// <param name="InputStream">The input stream.</param>
/// <param name="SheetIndex">Index of the sheet.</param>
/// <param name="RowFrom">The row from.</param>
/// <param name="ColumnFrom">The column from.</param>
/// <param name="RowTo">The row to.</param>
/// <param name="ColumnTo">The column to.</param>
/// <returns></returns>
public static Stream MergeCell(Stream InputStream, int SheetIndex, int RowFrom, int ColumnFrom, int RowTo, int ColumnTo)
{
workbook = new HSSFWorkbook(InputStream);
InitializeWorkbook();
MemoryStream ms = new MemoryStream();
InitializeWorkbook();
HSSFSheet sheet1 = workbook.GetSheetAt(SheetIndex);
sheet1.AddMergedRegion(new Region(RowFrom, ColumnFrom, RowTo, ColumnTo));
workbook.Write(ms);
ms.Flush();
return ms;
}
/// <summary>
/// 合併儲存格於檔案.
/// </summary>
/// <param name="FileName">Name of the file.</param>
/// <param name="InputStream">The input stream.</param>
/// <param name="SheetIndex">Index of the sheet.</param>
/// <param name="RowFrom">The row from.</param>
/// <param name="ColumnFrom">The column from.</param>
/// <param name="RowTo">The row to.</param>
/// <param name="ColumnTo">The column to.</param>
public static void MergeCell(string FileName, Stream InputStream, int SheetIndex, int RowFrom, int ColumnFrom, int RowTo, int ColumnTo)
{
MemoryStream ms = MergeCell(InputStream, SheetIndex, RowFrom, ColumnFrom, RowTo, ColumnTo) as MemoryStream;
WriteSteamToFile(ms, FileName);
}
/// <summary>
/// 建立新位元流並合併儲存格.
/// </summary>
/// <param name="RowFrom">The row from.</param>
/// <param name="ColumnFrom">The column from.</param>
/// <param name="RowTo">The row to.</param>
/// <param name="ColumnTo">The column to.</param>
/// <returns></returns>
public static Stream MergeCell(int RowFrom, int ColumnFrom, int RowTo, int ColumnTo)
{
workbook = new HSSFWorkbook();
InitializeWorkbook();
MemoryStream ms = new MemoryStream();
InitializeWorkbook();
HSSFSheet sheet1 = workbook.CreateSheet();
sheet1.AddMergedRegion(new Region(RowFrom, ColumnFrom, RowTo, ColumnTo));
workbook.Write(ms);
ms.Flush();
return ms;
}
/// <summary>
/// 建立新檔案並合併儲存格.
/// </summary>
/// <param name="FileName">Name of the file.</param>
/// <param name="RowFrom">The row from.</param>
/// <param name="ColumnFrom">The column from.</param>
/// <param name="RowTo">The row to.</param>
/// <param name="ColumnTo">The column to.</param>
public static void MergeCell(string FileName , int RowFrom, int ColumnFrom, int RowTo, int ColumnTo)
{
MemoryStream ms = MergeCell( RowFrom, ColumnFrom, RowTo, ColumnTo) as MemoryStream;
WriteSteamToFile(ms, FileName);
}
#endregion
設定儲存格公式
/// <summary>
/// 設定儲存格公式於位元流.
/// </summary>
/// <param name="InputStream">The input stream.</param>
/// <param name="SheetIndex">Index of the sheet.</param>
/// <param name="Formula">The formula.</param>
/// <param name="RowIndex">Index of the row.</param>
/// <param name="ColumnIndex">Index of the column.</param>
/// <returns></returns>
public static Stream SetFormula(Stream InputStream,int SheetIndex , string Formula, int RowIndex, int ColumnIndex)
{
//here, we must insert at least one sheet to the workbook. otherwise, Excel will say 'data lost in file'
//So we insert three sheet just like what Excel does
workbook = new HSSFWorkbook(InputStream);
InitializeWorkbook();
MemoryStream ms = new MemoryStream();
HSSFSheet sheet1 = workbook.GetSheetAt(SheetIndex);
sheet1.CreateRow(RowIndex).CreateCell(ColumnIndex).SetCellFormula(Formula);
workbook.Write(ms);
ms.Flush();
return ms;
}
/// <summary>
/// 設定儲存格公式於檔案.
/// </summary>
/// <param name="FileName">Name of the file.</param>
/// <param name="InputStream">The input stream.</param>
/// <param name="SheetIndex">Index of the sheet.</param>
/// <param name="Formula">The formula.</param>
/// <param name="RowIndex">Index of the row.</param>
/// <param name="ColumnIndex">Index of the column.</param>
public static void SetFormula(string FileName,Stream InputStream, int SheetIndex, string Formula, int RowIndex, int ColumnIndex)
{
MemoryStream ms = SetFormula(InputStream, SheetIndex, Formula, RowIndex, ColumnIndex) as MemoryStream;
WriteSteamToFile(ms, FileName);
}
/// <summary>
/// 建立新位元流並設定儲存格公式.
/// </summary>
/// <param name="Formula">The formula.</param>
/// <param name="RowIndex">Index of the row.</param>
/// <param name="ColumnIndex">Index of the column.</param>
/// <returns></returns>
public static Stream SetFormula(string Formula, int RowIndex, int ColumnIndex)
{
//here, we must insert at least one sheet to the workbook. otherwise, Excel will say 'data lost in file'
//So we insert three sheet just like what Excel does
workbook = new HSSFWorkbook();
InitializeWorkbook();
MemoryStream ms = new MemoryStream();
HSSFSheet sheet1 = workbook.CreateSheet();
sheet1.CreateRow(RowIndex).CreateCell(ColumnIndex).SetCellFormula(Formula);
workbook.Write(ms);
ms.Flush();
return ms;
}
/// <summary>
/// 建立新檔案並設定儲存格公式.
/// </summary>
/// <param name="FileName">Name of the file.</param>
/// <param name="Formula">The formula.</param>
/// <param name="RowIndex">Index of the row.</param>
/// <param name="ColumnIndex">Index of the column.</param>
public static void SetFormula(string FileName, string Formula, int RowIndex, int ColumnIndex)
{
MemoryStream ms = SetFormula( Formula, RowIndex, ColumnIndex) as MemoryStream;
WriteSteamToFile(ms, FileName);
}
#endregion