Excel和xml解析

2021-02-23 在幸福的道路上

一、Excel解析

  Excel主要是讀和寫,主要使用FileInputStream輸入流對象和FileOutStream輸出流對象

1、讀具體的Excel單元格

     讀取單元格主要有打開Excel、獲取所有sheet、獲取指定sheet、獲取指定的row、獲取指定的cell、讀取單元格等步驟。

public static void main(String[] args) {
//讀取Excel
/*
1、打開Excel
2、獲取所有sheet
3、獲取指定sheet
4、獲取指定的row
5、獲取指定的cell單元格 6、讀取單元格內容 */
FileInputStream fis = null;
try {
//1、打開Excel
fis = new FileInputStream("src/test/resources/demo.xlsx");
//2、獲取所有sheet
Workbook sheets = WorkbookFactory.create(fis);
//3、獲取指定sheet
//Sheet sheet = sheets.getSheet("分數");
Sheet sheet = sheets.getSheetAt(0);
//4、獲取指定的row
Row row = sheet.getRow(2);
//5、獲取指定的cell單元格
Cell cell = row.getCell(1, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
//6、讀取單元格內容
String cellValue = cell.getStringCellValue();
System.out.println(cellValue);
fis.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
//關流
try {
if (fis != null){
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

2、讀取所有內容

    讀取Excel內容主要有普通for循環和增強for循環兩種方式,具體步驟有打開Excel、獲取所有sheet、獲取所有sheet、獲取所有row、獲取所有cell、獲取所有單元格內容。

public static void main(String[] args) {
//讀取Excel
/*
1、打開Excel
2、獲取所有sheet
3、獲取指定sheet
4、獲取所有的row
5、獲取所有的cell單元格 6、讀取單元格內容 */
FileInputStream fis = null;
try {
//1、打開Excel
fis = new FileInputStream("src/test/resources/demo.xlsx");
//2、獲取所有sheet
Workbook sheets = WorkbookFactory.create(fis);
//3、獲取指定sheet
Sheet sheet = sheets.getSheetAt(0);
//4、獲取所有的row
//4.1、普通for循環
int lastRowNum = sheet.getLastRowNum();
for (int i = 0; i<=lastRowNum;i++){ //循環行
Row row = sheet.getRow(i);
short lastCellNum = row.getLastCellNum();
for (int j=0; j<lastCellNum; j++){ //循環列
Cell cell = row.getCell(j, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
cell.setCellType(CellType.STRING);
String cellValue = cell.getStringCellValue();
System.out.print(cellValue + ",");
}
System.out.println();
}
//4.2、增強for循環
for (Row row : sheet){ //循環行
for (Cell cell :row){ //循環列
//強行轉換單元格類型String
cell.setCellType(CellType.STRING);
String cellValue = cell.getStringCellValue();
System.out.print(cellValue +",");
}
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
}finally {
//關流
try {
if(fis != null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

3、讀入Excel表格內容並修改內容

   使用FileInputStream讀取Excel內容,使用FileOutStream修改Excel內容。

public static void main(String[] args) throws Exception {
//excel寫
//寫:修改操作:讀取出,再寫入。
//1、打開excel
FileInputStream fis = new FileInputStream("src/test/resources/demo.xlsx");
//2、獲取所有sheets
Workbook sheets = WorkbookFactory.create(fis);
//3、獲取指定sheet
Sheet sheet = sheets.getSheetAt(0);
//4、獲取指定row
Row row = sheet.getRow(1);
//5、獲取指定cell單元格
Cell cell = row.getCell(2, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
//6、修改值
cell.setCellValue(100);
//7、關鍵輸出流對象
FileOutputStream fos = new FileOutputStream("src/test/resources/demo.xlsx");
//8、把java內存中的內容回寫到Excel文件中
sheets.write(fos);
//9、關流
fis.close();
fos.close();

4、同時修改Excel表格中的內容

public static void main(String[] args) throws Exception {
WriteBackData w1= new WriteBackData(1,2,"Pass");
WriteBackData w2= new WriteBackData(2,2,"Fail");
WriteBackData w3= new WriteBackData(3,2,"Pass");
List<WriteBackData> list = new ArrayList<>();
list.add(w1);
list.add(w2);
list.add(w3);
for (int i = 0; i<list.size(); i++){
WriteBackData backData = list.get(i);
int rowNum = backData.getRowNum();
int cellNum = backData.getCellNum();
String content = backData.getContent();
getCell(rowNum,cellNum,content);
}

}

public static String getCell(int rowNum,int cellNum,String content) throws Exception {
//1、打開excel
FileInputStream fis = new FileInputStream("src/test/resources/exam.xlsx");
//2、獲取所有sheet
Workbook sheets = WorkbookFactory.create(fis);
//3、獲取指定sheet
Sheet sheet = sheets.getSheetAt(0);
//4、獲取指定row
Row row = sheet.getRow(rowNum);
Cell cell = row.getCell(cellNum, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
cell.setCellValue(content);
FileOutputStream fos = new FileOutputStream("src/test/resources/exam.xlsx");
sheets.write(fos);
fis.close();
fos.close();
return content;
}

二、xml

    xml:Extensible Markup Language,擴展性標記語言 HTML,主要特點是可擴展性,在遵循xml語法的前提下支持自定義和修改。

    xml主要使用dom4j解析技術,dom4j主要步驟為:添加依賴、創建解析器SaxReader對象、獲取document對象、獲取根元素、獲取根元素下的子元素。

public static void main(String[] args) throws Exception {
//xml讀 (了解) dom4j
//1、xml讀取對象
SAXReader reader = new SAXReader();
FileInputStream fis = new FileInputStream("src/test/resources/student.xml");
//2、整顆dom樹
Document document = reader.read(fis);
//3、獲取root標籤
Element rootElement = document.getRootElement();
System.out.println(rootElement.getName());
//4、獲取root標籤下的一級子標籤
List<Element> subElements1 = rootElement.elements();
for (Element element :subElements1){
System.out.println(element.getName()+"===="+element.getData());
//4.1、獲取屬性
Attribute id = element.attribute("id");
if (id != null){
System.out.println(id.getName()+"==="+id.getData());
}
//5、獲取root標籤下的二級子標籤
List<Element> subElements2 = element.elements();
if (subElements2 != null && subElements2.size()>0){
for (Element element1 :subElements2){
System.out.println(element1.getName()+"===="+element1.getData());
}
}
}
fis.close();
}

相關焦點

  • 一不小心改了Excel文件名,卻發現4個隱藏的神技巧
    (不如果不顯示後輟 ,選中工具欄中的文件擴展名選項)雙擊打開壓縮包,找到 xl - Worksheets,把受保護的工作表sheet1.xml 拖動複製出來。用記事本打開sheet1.xml文件,搜protect快速找到保護代碼並刪除,保護後把文件拖回到壓縮包中。
  • 如何解析你,Excel的Date呀
    我們項目使用了js-xlsx處理表格的導入導出,下面是導出Excel的偽代碼:import * as XLSX from 'xlsx';const xlsxMineType = 'application/vnd.openxmlformats
  • excel密碼忘了怎麼辦?1分鐘清除excel密碼
    更甚至在工作中,我們也經常會遇到一些加了密碼保護的excel文檔,這時候我們就對這些密碼束手無策了。今天教大家一招,只用1分鐘便可破解excel文檔的密碼。假設我們有下面一個受密碼保護的excel文檔,而且密碼我們也不知道。
  • Excel表格密碼忘記怎麼辦?教你十秒破解表格保護密碼
    案例場景:有時候為了對一些關鍵數據進行保密,我們會對excel工作表進行加密處理,但是偶爾都會出現密碼忘記的情況,所以就需要對已經設置的密碼進行破解。工作表密碼破解:第一步:將工作表名稱後綴xlsx更改為rar,也就是將excel文件格式更改為壓縮包格式。
  • Excel小教程二十二:送您一招破解Excel工作表保護密碼的技巧
    這是一篇所謂的Excel黑科技教程,針對遇到excel表格撤銷保護密碼忘記而言的教程。
  • 如何快速提取一個excel文件中的所有工作表名稱
    提取一個excel文件中的所有工作表名稱,有好幾種辦法,下面這種辦法不需要寫代碼,還可以提取excel中圖片的名稱。步驟1:複製一份Excel表格,將後綴修改為「zip」,然後解壓這個zip包,找到xl文件夾下的workbook.xml。
  • 【Excel技巧】如何破解工作表保護密碼
    1、將設置了保護密碼的excel文件的擴展名由「.xlsx」修改為「.rar」或者是「.zip」壓縮包後綴;2、滑鼠雙擊打開壓縮包文件,進入【xl】下的【worksheets】文件夾,在此文件夾下,包含有跟各個工作表名稱對應的xml文件。
  • xlsxwriter 操作 Excel
    優點缺點演示其使用流程,與你使用 excel 流程一致,只不過將你主步驟分解成了一個個對象實例來操作,通過引用實現操作關聯效果由列表元素構成元組,計算金額總和補充相較之下 PhpSpreadsheet 庫更強大,支持更多的讀寫格式支持的格式是否支持讀是否支持寫Open Document Format/OASIS (.ods)✓✓Office Open xml
  • excel表格打不開怎麼辦?excel表格打不開的解決方法
    一些網友在使用辦公軟體的時候,會遇到excel表格打不開的情況,那麼,電子表格打不開怎麼辦?
  • Excel工作表保護密碼忘了?一招幫你破解...
    2、雙擊打開壓縮包,找到 xl - Worksheets,把受保護的工作表sheet1.xml 拖動複製出來。3、用記事本打開sheet1.xml文件,搜protect快速找到保護代碼並刪除,保護後把文件拖回到壓縮包中。
  • excel文檔密碼忘了不用怕,教你怎麼刪掉密碼
    平時在用excel時經常會碰到這樣一種情況:別人發給你的表格設了密碼,被保護了,你無法對文檔進行編輯。或者自己出於安全考慮對excel表進行加密,事後卻忘了密碼,這個時候是不是很焦急呢?本來還打算處理完這些數據可以早早的完成任務呢?
  • excel的超連結,原來也可以批量替換!
    在excel中,添加的超級連結,如果連結的表或文件,改了名或移動了位置,所有相關的超連結都會失效。
  • Excel保護密碼忘了?10秒幫你破解
    一、工作簿保護密碼破解Excel工作簿保護後(審閱 - 保護工作簿),工作表無法插入、刪除和取消隱藏等操作。如果你忘記了密碼,想解除工作簿保護,就跟蘭色一起操作吧。選中工具欄中的文件擴展名選項)2、雙擊打開壓縮包,找到 xl - Worksheets,把受保護的工作表sheet1.xml
  • excel忘記密碼怎麼辦,教你十秒破解excel表格保護密碼
    有時,為了使某些關鍵數據保密,我們將加密excel工作表,但有時會忘記密碼,因此我們需要破解已設置的密碼。
  • Excel揭秘10:小心!Excel的保護工作表/工作簿密碼很容易破解
    微信公眾號:excelperfect祝各位朋友中秋節快樂!
  • 速度破解任何版本工作表Excel密碼
    工作表密碼破解:第一步:將工作表名稱後綴xlsx更改為rar,也就是將excel文件格式更改為壓縮包格式。第二步:雙擊打開壓縮包,依次打開壓縮包:xl—worksheets,找到被加密的文件sheet1.xml。
  • 教你一招破解工作表密碼,快速繞過Excel工作表密碼驗證
    下面就來實際操作一下:二、工作表密碼破解操作(以Excel2010為例):第一步:將工作表名稱後綴xlsx更改為rar,也就是將excel文件格式更改為壓縮包格式。第二步:雙擊打開壓縮包,依次打開壓縮包:xl—worksheets,找到被加密的文件sheet1.xml。
  • Excel保護密碼忘了?10秒幫你破解!
    一、工作簿保護密碼破解Excel工作簿保護後(審閱 - 保護工作簿),工作表無法插入、刪除和取消隱藏等操作。2、雙擊打開壓縮包,找到 xl - Worksheets,把受保護的工作表sheet1.xml
  • 一個參數一張Excel表,玩轉Pandas的read_excel()表格讀取
    read_excel()函數和read_csv()函數,在參數上面有很多相同點,因此我就以read_excel()函數為例,進行詳細的說明。usecols=[A,C:E]表示選擇A列,C列、D列和E列;usecols=[0,2]表示只選擇第一列和第三列;usecols=["列名1","列名2"...]這也是推薦使用的一種寫法;① usecols=Nonedf4 = pd.read_excel("usecols.xlsx",usecols=None) # 默認df4
  • 真正逆天的excel技巧,是你認為不可能,可它卻實現了!
    >