קרא את ערך התא של Excel במקום הנוסחה עם נקודת עניין של אפאצ'י

1. הקדמה

בעת קריאת קובץ אקסל בג'אווה, בדרך כלל אנו רוצים לקרוא את ערכי התאים כדי לבצע חישוב כלשהו או ליצור דוח. עם זאת, אנו עשויים להיתקל בתא אחד או יותר המכיל נוסחאות ולא ערכי נתונים גולמיים. אז איך נגיע לערכי הנתונים בפועל של אותם תאים?

במדריך זה נבחן דרכים שונות לקרוא ערכי תאי Excel - ולא הנוסחה המחשבת את ערכי התאים - באמצעות ספריית Apache POI Java.

ישנן שתי דרכים לפתור בעיה זו:

  • הבא את הערך השמור במטמון האחרון עבור התא
  • הערך את הנוסחה בזמן ריצה כדי לקבל את ערך התא

2. תלות של Maven

עלינו להוסיף את התלות הבאה בקובץ pom.xml עבור נקודות עניין של אפאצ'י:

 org.apache.poi poi-ooxml 4.1.1 

את הגרסה האחרונה של poi-ooxml ניתן להוריד מ Maven Central.

3. הבא את הערך האחרון במטמון

Excel מאחסן שני אובייקטים עבור התא כאשר נוסחה מחשבת את ערכה. האחת היא הנוסחה עצמה, והשנייה היא הערך במטמון. הערך במטמון מכיל את הערך האחרון שהוערך על ידי הנוסחה.

אז הרעיון כאן הוא שנוכל להביא את הערך המטמון האחרון ולשקול אותו כערך תא. לא תמיד זה נכון שהערך האחרון במטמון הוא ערך התא הנכון. עם זאת, כאשר אנו עובדים עם קובץ Excel שנשמר ואין שינויים אחרונים בקובץ, הערך השמור במטמון האחרון צריך להיות ערך התא.

בואו נראה כיצד להביא את הערך האחרון במטמון לתא:

FileInputStream inputStream = FileInputStream חדש (קובץ חדש ("temp.xlsx")); חוברת עבודה חוברת עבודה = XSSFWorkbook חדש (inputStream); גיליון גיליון = חוברת עבודה. GetSheetAt (0); CellAddress cellAddress = CellAddress חדש ("C2"); שורה שורה = sheet.getRow (cellAddress.getRow ()); תא תא = row.getCell (cellAddress.getColumn ()); אם (cell.getCellType () == CellType.FORMULA) {switch (cell.getCachedFormulaResultType ()) {case BOOLEAN: System.out.println (cell.getBooleanCellValue ()); לשבור; מקרה מספר: System.out.println (cell.getNumericCellValue ()); לשבור; מקרה STRING: System.out.println (cell.getRichStringCellValue ()); לשבור; }}

4. הערך את הנוסחה לקבלת ערך התא

נקודת עניין של אפאצ'י מספקת FormulaEvaluator class, המאפשר לנו לחשב את תוצאות הנוסחאות בגיליונות אקסל.

אז נוכל להשתמש FormulaEvaluator כדי לחשב את ערך התא בזמן הריצה ישירות. ה FormulaEvaluator class מספק שיטה הנקראת evaluFormulaCell, אשר מעריך את ערך התא עבור הנתון תָא מתנגד ומחזיר א CellType אובייקט, המייצג את סוג הנתונים של ערך התא.

בואו נראה גישה זו בפעולה:

// מערך FormulaEvaluator הערכת חוברת עבודה קיימת = workbook.getCreationHelper (). createFormulaEvaluator (); // הגדרת גיליון, שורה ותאים קיימת אם (cell.getCellType () == CellType.FORMULA) {switch (evaluator.evaluateFormulaCell (cell)) {case BOOLEAN: System.out.println (cell.getBooleanCellValue ()); לשבור; מקרה מספר: System.out.println (cell.getNumericCellValue ()); לשבור; מקרה STRING: System.out.println (cell.getStringCellValue ()); לשבור; }} 

5. איזו גישה לבחור

ההבדל הפשוט בין שתי הגישות כאן הוא שהשיטה הראשונה משתמשת בערך המטמון האחרון, והשיטה השנייה מעריכה את הנוסחה בזמן ריצה.

אם אנו עובדים עם קובץ Excel שכבר נשמר ואנחנו לא מתכוונים לבצע שינויים בגיליון האלקטרוני הזה בזמן ריצה, גישת הערך במטמון טובה יותר מכיוון שאיננו צריכים להעריך את הנוסחה.

עם זאת, אם אנו יודעים שאנחנו הולכים לבצע שינויים תכופים בזמן הריצה, עדיף להעריך את הנוסחה בזמן הריצה כדי להביא את ערך התא.

6. מסקנה

במאמר מהיר זה ראינו שתי דרכים להשיג את הערך של תא אקסל ולא את הנוסחה המחשבת אותו.

קוד המקור השלם למאמר זה זמין באתר GitHub.


$config[zx-auto] not found$config[zx-overlay] not found