30/8/58

การใส่ชื่อ sheet name ใน excel แบบปลอดภัยโดยใช้ WorkbookUtil.createSafeSheetName

การใส่ชื่อ sheet name ใน excel แบบปลอดภัยโดยใช้ WorkbookUtil.createSafeSheetName

จากบทความเรื่อง การสร้าง Sheet ใน Excel โดยใช้ Java POI เราได้ทำการสร้างและได้กำหนดชื่อของ sheet แต่ในการตั้งชื่อ sheet นั้นก็มีข้อจำกัดบางอย่าง ถ้าหากเราตั้งชื่อผิดกฎของมันละก็อาจทำให้เกิด Exception บางอย่างได้ ตัวอย่าง Exception ที่เกิดจากการตั้งชื่อ sheet ดังนั้นบทความนี้เราได้แนะนำ Class ที่ชื่อว่า WorkbookUtil ซึ่งจะมี method ที่ช่วยในการตั้งชื่อให้กับ sheet อยู่ ซึ่งที่เราแนะนำจะเป็น method ชื่อ createSafeSheetName

เรามาดูกันดีกว่าว่า method นี้มีการทำงานอย่างไร ให้เราเข้าไปที่ Class WorkbookUtil เพื่อดูโค้ด จะได้ประมาณนี้

public static final String createSafeSheetName(String nameProposal) {
 return createSafeSheetName(nameProposal, ' ');
}

public static final String createSafeSheetName(String nameProposal,
  char replaceChar) {
 if (nameProposal == null) {
  return "null";
 }
 if (nameProposal.length() < 1) {
  return "empty";
 }
 int length = Math.min(31, nameProposal.length());
 String shortenname = nameProposal.substring(0, length);
 StringBuilder result = new StringBuilder(shortenname);
 for (int i = 0; i < length; ++i) {
  char ch = result.charAt(i);
  switch (ch) {
  case '\0':
  case '\3':
  case '*':
  case '/':
  case ':':
  case '?':
  case '[':
  case '\\':
  case ']':
   result.setCharAt(i, replaceChar);
   break;
  case '\'':
   if ((i == 0) || (i == length - 1)) {
    result.setCharAt(i, replaceChar);
   }

  }

 }

 return result.toString();
}

จากโค้ด เราจะเห็นว่าเมื่อเราเรียก method createSafeSheetName ถ้าเราใส่ชื่อ sheet อย่างเดียว มันจะไปเรียก method อีกตัวหนึ่งที่ชื่อเดียวกันแต่ส่งพารามิเตอร์ต่างกัน ซึ่ง method ที่ใส่ชื่อ sheet name อย่างเดียว จะส่งค่าช่องว่างหนึ่งตัวเข้าไป

ใน method ที่ใส่ทั้ง sheet name และก็ replaceChar จะทำการเช็คก่อนว่าเป็น null กับค่าว่างหรือเปล่า

จากนั้นก็เช็คว่าขนาดความยาวของ sheet name ที่เราใส่เข้าไปมีขนาดเกิน 31 ตัวหรือเปล่าโดยใช้ Math.min จะเห็นว่าถ้าชื่อ sheet ของคุณมีขนาดน้อยกว่าก็เอาขนาดของชื่อ sheet คุณ แต่ถ้าชื่อ sheet คุณมากกว่า 31 ตัวก็เอาค่า 31 มา จากนั้นก็ทำการ substring ซะ (ซึ่งข้อกำหนดของ sheet name ต้องมีขนาดไม่เกิน 31 ตัวอักษร)

จากนั้นก็ทำการ check ว่ามีอักขระพิเศษหรือเปล่าโดยถ้าเจอก็แทนอักขระเหล่านั้นด้วย replaceChar ที่ใส่เข้ามา

เพียงแค่นี้เราก็ไม่ต้องกังวลว่าจะตั้งชื่อ sheet name ผิดกฎ หรือกังวลเกี่ยวกับ Exception ที่เกิดขึ้นจากการตั้งชื่อ sheet name แล้วเพียงแค่ใช้ createSafeSheetName 

ไม่มีความคิดเห็น:

แสดงความคิดเห็น