আমি কীভাবে তারিখের জন্য সেল মান সেট করব এবং ডিফল্ট এক্সেল তারিখের ফর্ম্যাটটি প্রয়োগ করব?


103

বিদ্যমান এক্সেল 2003 ফাইলগুলি প্রোগ্রামগতভাবে পড়তে আমি কিছু সময়ের জন্য অ্যাপাচি পিওআই ব্যবহার করছি। মেমোরিতে পুরো .xls ফাইলগুলি তৈরি করার জন্য এখন আমার একটি নতুন প্রয়োজনীয়তা রয়েছে (এখনও অ্যাপাচি পিওআই ব্যবহার করছে) এবং তারপরে সেগুলি শেষে একটি ফাইলে লিখুন। আমার পথে দাঁড়িয়ে একমাত্র সমস্যা হ'ল খেজুর সহ কক্ষগুলি পরিচালনা করা।

নিম্নলিখিত কোড বিবেচনা করুন:

Date myDate = new Date();
HSSFCell myCell;
// code that assigns a cell from an HSSFSheet to 'myCell' would go here...
myCell.setCellValue(myDate);

যখন আমি এই সেলটি যুক্ত ওয়ার্কবুকটি কোনও ফাইলের বাইরে লিখি এবং এটি এক্সেলের মাধ্যমে খুলি, ঘরটি একটি সংখ্যা হিসাবে প্রদর্শিত হয়। হ্যাঁ, আমি বুঝতে পারি যে এক্সেল তার 'তারিখগুলি' 1 জানুয়ারী 1 1900 সাল থেকে দিনের সংখ্যা হিসাবে সংরক্ষণ করে এবং এটিই ঘরের সংখ্যাটি প্রতিনিধিত্ব করে।

প্রশ্ন: আমি আমার তারিখের ঘরে একটি ডিফল্ট তারিখের ফর্ম্যাটটি প্রয়োগ করতে চাই তা জানাতে আমি কোন এপিআই কলগুলি পিওআইতে ব্যবহার করতে পারি?

আদর্শভাবে আমি চাই স্প্রেডশীট সেলটি একই ডিফল্ট তারিখ বিন্যাসের সাথে প্রদর্শিত হবে যা এক্সেল নির্ধারিত করে দিবে যদি কোনও ব্যবহারকারী ম্যানুয়ালি এক্সেলের মধ্যে স্প্রেডশিটটি খোলে এবং একটি সেল মান টাইপ করে যে এক্সেল একটি তারিখ হিসাবে স্বীকৃত।

উত্তর:


177

http://poi.apache.org/spreadsheet/quick-guide.html#CreateDateCells

CellStyle cellStyle = wb.createCellStyle();
CreationHelper createHelper = wb.getCreationHelper();
cellStyle.setDataFormat(
    createHelper.createDataFormat().getFormat("m/d/yy h:mm"));
cell = row.createCell(1);
cell.setCellValue(new Date());
cell.setCellStyle(cellStyle);

24
ধন্যবাদ নিনজা, এটি আমার জন্য কাজ করে। এই কাজটি করা দরকার অন্যদের জন্য একটি মন্তব্য। একটি পিওআই ক্লাস রয়েছে যার নাম রয়েছে BuiltinFormatsসমস্ত স্ট্যান্ডার্ড ফর্ম্যাটগুলি (কেবলমাত্র তারিখের ফর্ম্যাটগুলি নয়) যা এক্সেল জানে। আমি getFormat()উপরের স্নিপেটে দেখানো পদ্ধতিতে আমার প্যারামিটার হিসাবে ব্যবহার করতে তাদের মধ্যে একটির সাথে আঁকছি।
জিম টফ

4
গুরুত্বপূর্ণ অংশটি লিঙ্কটির মন্তব্যে রয়েছে: আমরা দ্বিতীয় কক্ষকে তারিখ (এবং সময়) হিসাবে স্টাইল করি। ওয়ার্কবুক থেকে একটি নতুন সেল শৈলী তৈরি করা গুরুত্বপূর্ণ অন্যথায় আপনি বিল্ট স্টাইলে সংশোধন করতে পারেন এবং কেবলমাত্র এই ঘরটিই নয় অন্য কোষকেও প্রভাবিত করতে পারেন।
সিজিকে

ধন্যবাদ, @ নিনজা আপনি জানেন কেন getCreationHelper()প্রয়োজন হয়? আমি এখনই মুলের সাথে একটি এক্সেল আউটপুট ফাইল উত্পন্ন করার জন্য কাজ করছি এবং আমি প্রকৃতি সহায়ক createDataFormat()ছাড়া এটি ব্যবহার করতে সক্ষম হয়েছি এবং আমার পরীক্ষায় একটি এক্সেল ফাইল তৈরি করেছি। এটি ব্যবহার না করার একটি খারাপ দিক রয়েছে? ধন্যবাদ!
রাশিকি

@ রাশিকি এই উত্তরটি 6 বছর আগে পোস্ট করা হয়েছিল। আমি অনুমান করি যে এই সময়ে অ্যাপাচি পিওআইয়ের API পরিবর্তন হয়েছে। আপনার প্রশ্নের আমার উত্তর হ'ল 'না, কোনও খারাপ দিক নেই (যদি এটি প্রত্যাশা অনুযায়ী কাজ করে)'
নিনজা

আমি এর জন্য কোনও বিন্যাস দেখতে পাচ্ছি না mm/dd/yyyy। আমি যখন অন্য কোনও ফর্ম্যাট ব্যবহার করি, এক্সেলটি ত্রুটি File error, some number formats may have been lostপ্রদর্শন করে, এটি এক্সেলে প্রদর্শন Dateটাইপ করে। এটি কীভাবে ঠিক করা যায় তা সম্পর্কে আমার কোনও ক্লু নেই।
আকাশ

25

ডিফল্টতে এক্সেল টাইপ করার তারিখ নির্ধারণ করতে (ওএস স্তরের লোকালে / -> ডিফল্ট হওয়া মানে xlsx অন্য কোনও জার্মান বা ব্রিটিশ ব্যক্তির দ্বারা খোলা হলে / এবং যদি আপনি এটি এক্সেলের সেল ফর্ম্যাট চয়নকারীতে চয়ন করেন তবে একটি নক্ষত্রের সাথে পতাকাঙ্কিত করা উচিত):

    CellStyle cellStyle = xssfWorkbook.createCellStyle();
    cellStyle.setDataFormat((short)14);
    cell.setCellStyle(cellStyle);

আমি এটি এক্সএলএক্সএক্স দিয়ে করেছি এবং এটি দুর্দান্ত কাজ করেছে।


4
পঞ্চাশের মন্তব্যে একেবারে একমত আমি শুধুমাত্র এক প্রশ্ন আছে। সেরা পন্থা কি। ডেটাফর্ম্যাট সংক্ষিপ্ত মান (14) বা স্ট্রিং মান ("এম / ডি / ইয়ে") এর উপর নির্ভর করুন। এক্সেল-এ স্ট্যান্ডার্ড ডেট ফর্ম্যাট বর্ণনা করে এমন ধ্রুবক মানটি আসলে কোনটি? ডেটাফর্ম্যাট.গেট ফরম্যাট () এর প্যারামিটার হিসাবে স্ট্রিং এবং সংক্ষিপ্ত মান উভয় রয়েছে।
মিক্লোস ক্রিভান

মিক্লোস, আমি জানি না কীভাবে স্ট্রিংয়ের মান সমাধান কাজ করে। আমি যদি খুশি হব যে কেউ যদি এক্সেক্সলেও বিভিন্ন ভাষার সাথে "ভাষা ভিত্তিক ভিন্ন ভিন্ন ডিফল্ট তারিখের ফর্ম্যাট" প্রদর্শন করছে কিনা তা প্রতিক্রিয়া জানাতে পারে।
ব্লন্ডকোড

13

এই উদাহরণটি .xlsx ফাইলের ধরণের সাথে কাজ করার জন্য। এই উদাহরণটি .xslx স্প্রেডশিট তৈরি করতে ব্যবহৃত একটি .jsp পৃষ্ঠা থেকে আসে।

import org.apache.poi.xssf.usermodel.*; //import needed

XSSFWorkbook  wb = new XSSFWorkbook ();  // Create workbook
XSSFSheet sheet = wb.createSheet();      // Create spreadsheet in workbook
XSSFRow row = sheet.createRow(rowIndex); // Create the row in the spreadsheet


//1. Create the date cell style
XSSFCreationHelper createHelper = wb.getCreationHelper();
XSSFCellStyle cellStyle         = wb.createCellStyle();
cellStyle.setDataFormat(
createHelper.createDataFormat().getFormat("MMMM dd, yyyy")); 

//2. Apply the Date cell style to a cell

//This example sets the first cell in the row using the date cell style
cell = row.createCell(0);
cell.setCellValue(new Date());
cell.setCellStyle(cellStyle);

1

আমি এখানে আমার উত্তরটি লিখছি কারণ এটি অন্যান্য পাঠকদের পক্ষে সহায়ক হতে পারে, যাদের এখানে প্রশ্নকর্তার চেয়ে কিছুটা আলাদা প্রয়োজন হতে পারে।

আমি একটি .xlsx টেম্পলেট প্রস্তুত; সমস্ত কক্ষগুলি যা খেজুরের সাহায্যে পপুলেশন করা হবে, ইতোমধ্যে তারিখ ঘর হিসাবে এটি ফর্ম্যাট করা হয়েছে (এক্সেল ব্যবহার করে)।

আমি অ্যাপাচি পিওআই ব্যবহার করে .xlsx টেমপ্লেটটি খুলি এবং তারপরে কেবল ঘরে তারিখটি লিখি এবং এটি কার্যকর হয়।

নীচের উদাহরণে, সেল এ 1 ইতিমধ্যে ফর্ম্যাট সহ এক্সেলের মধ্যে থেকে ফর্ম্যাট করা হয়েছে [$-409]mmm yyyyএবং জাভা কোডটি কেবল ঘরটি তৈরি করতে ব্যবহৃত হয়।

FileInputStream inputStream = new FileInputStream(new File("Path to .xlsx template"));
Workbook wb = new XSSFWorkbook(inputStream);
Date date1=new Date();
Sheet xlsMainTable = (Sheet) wb.getSheetAt(0);
Row myRow= CellUtil.getRow(0, xlsMainTable);
CellUtil.getCell(myRow, 0).setCellValue(date1);

যখন এক্সেলটি খোলা হয়, তারিখটি সঠিকভাবে ফর্ম্যাট হয়।


0

এই কোড নমুনা তারিখ বিন্যাস পরিবর্তন করতে ব্যবহার করা যেতে পারে। এখানে আমি yyyy-MM-dd থেকে dd-MM-yyyy এ পরিবর্তন করতে চাই। এখানে posকলাম অবস্থান।

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

class Test{ 
public static void main( String[] args )
{
String input="D:\\somefolder\\somefile.xlsx";
String output="D:\\somefolder\\someoutfile.xlsx"
FileInputStream file = new FileInputStream(new File(input));
XSSFWorkbook workbook = new XSSFWorkbook(file);
XSSFSheet sheet = workbook.getSheetAt(0);
Iterator<Row> iterator = sheet.iterator();
Cell cell = null;
Row row=null;
row=iterator.next();
int pos=5; // 5th column is date.
while(iterator.hasNext())
{
    row=iterator.next();

    cell=row.getCell(pos-1);
    //CellStyle cellStyle = wb.createCellStyle();
    XSSFCellStyle cellStyle = (XSSFCellStyle)cell.getCellStyle();
    CreationHelper createHelper = wb.getCreationHelper();
    cellStyle.setDataFormat(
        createHelper.createDataFormat().getFormat("dd-MM-yyyy"));
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date d=null;
    try {
        d= sdf.parse(cell.getStringCellValue());
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        d=null;
        e.printStackTrace();
        continue;
    }
    cell.setCellValue(d);
    cell.setCellStyle(cellStyle);
   }

file.close();
FileOutputStream outFile =new FileOutputStream(new File(output));
workbook.write(outFile);
workbook.close();
outFile.close();
}}

0

এক্সেল ব্যবহার করে বিন্যাসের স্ট্রিংটি এটি অনুমান না করেই জানতে: একটি এক্সেল ফাইল তৈরি করুন, সেল এ 1 তে একটি তারিখ লিখুন এবং এটি আপনার পছন্দ মতো ফর্ম্যাট করুন। তারপরে নিম্নলিখিত লাইনগুলি চালান:

FileInputStream fileIn = new FileInputStream("test.xlsx");
Workbook workbook = WorkbookFactory.create(fileIn);
CellStyle cellStyle = workbook.getSheetAt(0).getRow(0).getCell(0).getCellStyle();
String styleString = cellStyle.getDataFormatString();
System.out.println(styleString);

তারপরে ফলাফলটি স্ট্রিংটি অনুলিপি করুন, ব্যাকস্ল্যাশগুলি সরিয়ে ফেলুন (উদাহরণস্বরূপ d/m/yy\ h\.mm;@হয়ে ওঠে d/m/yy h.mm;@) এবং এটি http://poi.apache.org/spreadsheet/quick-guide.html# ক্রিয়েটডেটেলস কোডগুলিতে ব্যবহার করুন :

CellStyle cellStyle = wb.createCellStyle();
CreationHelper createHelper = wb.getCreationHelper();
cellStyle.setDataFormat(createHelper.createDataFormat().getFormat("d/m/yy h.mm;@"));
cell = row.createCell(1);
cell.setCellValue(new Date());
cell.setCellStyle(cellStyle);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.