[英]Read Excel Cell Format
我正在研究這個程序,它將讀取excel文件中的數據並將其放入我們的數據庫中。 該程序是使用C#在Visual Studio 2010中編寫的,我正在使用NPOI庫。
在過去,我能夠逐行和逐個單元地讀取電子表格以獲取數據,但excel文件的新格式不允許我輕松地執行此操作。 (excel是由另一個用戶給出的,所以我無法真正做出重大改變)。
一張表中有幾個“表”(每個列名使用邊框和標題),我需要主要從表中獲取數據,但有時也需要在表外部。
我想知道我是否要逐行閱讀電子表格(這是我有點熟悉的),有沒有辦法告訴我已經到了桌子? 有沒有辦法可以閱讀細胞的“格式”?
我的意思是,例如,“ 此單元格周圍有邊框,因此從該行開始是一個表格。 ”或“ 此單元格中的文本為粗體,因此該行是此新表格的標題行。 ”
在過去,我只能閱讀電子表格的“文本”而不是格式/樣式。 我一直在網上搜索,我只能找到如何設置輸出excel的樣式,但不能找到如何從輸入中讀取格式。
任何幫助表示贊賞,謝謝!
將源工作簿中的各個表定義為具有已知名稱的命名范圍會更好。 然后你可以得到這樣的相關區域 -
using System.IO;
using System.Windows;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
// ...
using (var file = new FileStream(workbookLocation, FileMode.Open, FileAccess.Read))
{
var workbook = new XSSFWorkbook(file);
var nameInfo = workbook.GetName("TheTable");
var tableRange = nameInfo.RefersToFormula;
// Do stuff with the table
}
如果您無法控制源電子表格並且無法將表定義為命名范圍,則可以按照建議讀取單元格格式。 以下是閱讀TopBorder風格的示例 -
using (var file = new FileStream(workbookLocation, FileMode.Open, FileAccess.Read))
{
var workbook = new XSSFWorkbook(file);
var sheet = workbook.GetSheetAt(0);
for (int rowNo = 0; rowNo <= sheet.LastRowNum; rowNo++)
{
var row = sheet.GetRow(rowNo);
if (row == null) // null is when the row only contains empty cells
continue;
for (int cellNo = 0; cellNo <= row.LastCellNum; cellNo++)
{
var cell = row.GetCell(cellNo);
if (cell == null) // null is when the cell is empty
continue;
var topBorderStyle = cell.CellStyle.BorderTop;
if (topBorderStyle != BorderStyle.None)
{
MessageBox.Show(string.Format("Cell row: {0} column: {1} has TopBorder: {2}", cell.Row.RowNum, cell.ColumnIndex, topBorderStyle));
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.