當前位置:首頁 » 操作系統 » 讀取excel源碼

讀取excel源碼

發布時間: 2023-08-30 17:00:55

『壹』 如何用Apache POI讀取Excel

首先POI是開源組織Apache出品的一個開源jar包,提供了方便解析Excel的API,我們可以非常方便的使用它來讀取Excel。這里介紹3.5Final版本。

所需用到的jar包如下:

說到Excel,有2003和2007,格式是不一樣的,用POI解析的方法也就不一樣,Excel2003主要是使用org.apache.poi.hssf.usermodel包中的類來解析,而Excel2007就是使用org.apache.poi.xssf.usermodel來解析。

解析Excel2003源碼

說到Excel,有2003和2007,格式是不一樣的,用POI解析的方法也就不一樣,Excel2003主要是使用org.apache.poi.hssf.usermodel包中的類來解析,而Excel2007就是使用org.apache.poi.xssf.usermodel來解析。

解析Excel2003源碼

StringBuffer content = new StringBuffer();
HSSFWorkbook workbook = new HSSFWorkbook(is); // 創建對Excel工作簿文件的引用

for (int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++) {
if (null != workbook.getSheetAt(numSheets)) {
HSSFSheet aSheet = workbook.getSheetAt(numSheets); // 獲得一個sheet

for (int rowNumOfSheet = 0; rowNumOfSheet <= aSheet.getLastRowNum(); rowNumOfSheet++) {
if (null != aSheet.getRow(rowNumOfSheet)) {
HSSFRow aRow = aSheet.getRow(rowNumOfSheet); // 獲得一行

for (int cellNumOfRow = 0; cellNumOfRow <= aRow.getLastCellNum(); cellNumOfRow++) {
if (null != aRow.getCell(cellNumOfRow)) {
HSSFCell aCell = aRow.getCell(cellNumOfRow); // 獲得列值

if (aCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
content.append(aCell.getNumericCellValue() + " ");
} else if (aCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {
content.append(aCell.getBooleanCellValue() + " ");
} else if (aCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
content.append(aCell.getStringCellValue() + " ");
} else if (aCell.getCellType() == HSSFCell.CELL_TYPE_FORMULA){
content.append(aCell.getCellFormula() + " ");
} else {
continue;
}
}
if(cellNumOfRow == aRow.getLastCellNum()) {
content.append(" ");
}
}
}
}
}
}

return content.toString().trim();

解析Excel2007和2003基本一樣,只是將HSSFSheet,HSSFCell等都改成XSSFSheet,XSSFCell即可。

另外要提醒大家的是Excel的樣式都是基於一個單元格的,所以用HSSFRow.getRowStyle()拿樣式會出問題的,不一定會拿到你想要的樣式。處理合並單元格是POI的一個難點,只能通過判斷當前單元格是否在合並單元格之中,如果是,那此單元格的值便是這個合並單元格的首位置單元格的值,只有通過這樣才能來處理合並單元格。

處理合並單元格的代碼:


public static boolean isMergedRegion(HSSFSheet sheet, HSSFCell cell) {
//得到一個sheet中有多少個合並單元格
int sheetmergerCount = sheet.getNumMergedRegions();
for(int i = 0; i < sheetmergerCount; i++) {
//得出具體的合並單元格
CellRangeAddress ca = sheet.getMergedRegion(i);
//得到合並單元格的起始行, 結束行, 起始列, 結束列
int firstC = ca.getFirstColumn();
int lastC = ca.getLastColumn();
int firstR = ca.getFirstRow();
int lastR = ca.getLastRow();
//判斷該單元格是否在合並單元格範圍之內, 如果是, 則返回 true
if(cell.getColumnIndex() <= lastC && cell.getColumnIndex() >= firstC) {
if(cell.getRowIndex() <= lastR && cell.getRowIndex() >= firstR) {
return true;
}
}
}
return false;
}


public static String getMergedRegionValue(HSSFSheet sheet, HSSFCell cell) {
//獲得一個 sheet 中合並單元格的數量
int sheetmergerCount = sheet.getNumMergedRegions();
//便利合並單元格
for(int i = 0; i < sheetmergerCount; i++) {
//獲得合並單元格
CellRangeAddress ca = sheet.getMergedRegion(i);
//獲得合並單元格的起始行, 結束行, 起始列, 結束列
int firstC = ca.getFirstColumn();
int lastC = ca.getLastColumn();
int firstR = ca.getFirstRow();
int lastR = ca.getLastRow();
//判斷該單元格是否是在合並單元格中, 如果是, 則返回所在合並單元格的首單元格的值
if(cell.getColumnIndex() <= lastC && cell.getColumnIndex() >= firstC) {
if(cell.getRowIndex() <= lastR && cell.getRowIndex() >= firstR) {
HSSFRow fRow = sheet.getRow(firstR);
HSSFCell fCell = fRow.getCell(firstC);
//除了合並單元格首單元格的值, 其餘的用(*)來區分
if (fCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC && hasBorder(cell)) {
return String.valueOf(fCell.getNumericCellValue());
} else if (fCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN && hasBorder(cell)) {
return String.valueOf(fCell.getBooleanCellValue());
} else if (fCell.getCellType() == HSSFCell.CELL_TYPE_STRING && hasBorder(cell)) {
return fCell.getStringCellValue();
} else if (fCell.getCellType() == HSSFCell.CELL_TYPE_FORMULA && hasBorder(cell)){
return String.valueOf(fCell.getCellFormula());
}
}
}
}
return "";
}

『貳』 別人用excel表格做的管理系統怎麼查看此管理系統的源碼

  1. 新建excel文件,alt+F11進入VBA編輯器,插入模塊,輸入以下代碼:

Sub MoveProtect()


Dim FileName As String

FileName = Application.GetOpenFilename("Excel文件(*.xls & *.xla),*.xls;*.xla", , "VBA破解")

If FileName = CStr(False) Then

Exit Sub

Else

VBAPassword FileName, False ' 引用下面的自定義函數

End If

End Sub


Private Function VBAPassword(FileName As String, Optional Protect As Boolean = False)

If Dir(FileName) = "" Then

Exit Function

Else

FileCopy FileName, FileName & ".bak"

End If


Dim GetData As String * 5

Open FileName For Binary As #1

Dim CMGs As Long

Dim DPBo As Long

For i = 1 To LOF(1)

Get #1, i, GetData

If GetData = "CMG=""" Then CMGs = i

If GetData = "[Host" Then DPBo = i - 2: Exit For

Next

If CMGs = 0 Then

MsgBox "請先對VBA編碼設置一個保護密碼...", 32, "提示"

Exit Function

End If

If Protect = False Then

Dim St As String * 2

Dim s20 As String * 1 '取得一個0D0A十六進制字串

Get #1, CMGs - 2, St '取得一個20十六制字串

Get #1, DPBo + 16, s20 '替換加密部份機碼

For i = CMGs To DPBo Step 2

Put #1, i, St

Next '加入不配對符號

If (DPBo - CMGs) Mod 2 <> 0 Then

Put #1, DPBo + 1, s20

End If

MsgBox "文件解密成功......", 32, "提示"

Else

Dim MMs As String * 5

MMs = "DPB="""

Put #1, CMGs, MMs

MsgBox "對文件特殊加密成功......", 32, "提示"

End If

Close #1

End Function

2. 運行上面的代碼,選擇你的文件,移除密碼成功後打開文件,按alt+F11查看源碼:

『叄』 excel怎麼看vba源代碼

按ALT+F11,可以進入VBE編輯界面。

或者功能區按鈕,可參考:

Excel-VBA基礎(1):如何在菜單欄顯示「開發工具」

熱點內容
紫光存儲最近 發布:2025-02-01 04:58:49 瀏覽:380
sqlserver重命名 發布:2025-02-01 04:56:24 瀏覽:428
iisftp被動模式 發布:2025-02-01 04:41:50 瀏覽:350
車載安卓怎麼安裝軟體 發布:2025-02-01 04:30:50 瀏覽:469
安卓系統su程序是什麼 發布:2025-02-01 04:25:42 瀏覽:475
android代碼行數統計 發布:2025-02-01 04:20:47 瀏覽:216
快速喊話腳本 發布:2025-02-01 04:16:48 瀏覽:885
如何分辨普拉多的配置 發布:2025-02-01 04:11:45 瀏覽:681
linuxc文件刪除 發布:2025-02-01 04:11:33 瀏覽:218
c語言稀疏矩陣轉置矩陣 發布:2025-02-01 03:47:57 瀏覽:531