java - एक संख्यात्मक सेल "Poi" से एक पाठ मान नहीं मिल सकता




apache-poi (8)

उस कोड का उपयोग करें जो निश्चित रूप से काम करता है और मैंने इसे संशोधित किया है।

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
//import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.*;

public class TestApp {

    public static void main(String[] args) throws Exception {

        try {

            Class forName = Class.forName("com.mysql.jdbc.Driver");
            Connection con = null;
            con = DriverManager.getConnection("jdbc:mysql://localhost/tables", "root", "root");
            con.setAutoCommit(false);
            PreparedStatement pstm = null;
            FileInputStream input = new FileInputStream("C:\\Users\\Desktop\\a1.xls");
            POIFSFileSystem fs = new POIFSFileSystem(input);
            Workbook workbook;
            workbook = WorkbookFactory.create(fs);
            Sheet sheet = workbook.getSheetAt(0);
            Row row;
            for (int i = 1; i <= sheet.getLastRowNum(); i++) {
                row = (Row) sheet.getRow(i);
                String name = row.getCell(0).getStringCellValue();
                String add = row.getCell(1).getStringCellValue();

                int  contact = (int) row.getCell(2).getNumericCellValue();

                String email = row.getCell(3).getStringCellValue();

                String sql = "INSERT INTO employee (name, address, contactNo, email) VALUES('" + name + "','" + add + "'," + contact + ",'" + email + "')";
                pstm = (PreparedStatement) con.prepareStatement(sql);
                pstm.execute();
                System.out.println("Import rows " + i);
            }
            con.commit();
            pstm.close();
            con.close();
            input.close();
            System.out.println("Success import excel to mysql table");
        } catch (IOException e) {
        }
    }

}

मैं एक्सेल में एक स्प्रेडशीट से डेटा का उपभोग करने की कोशिश कर रहा हूं, लेकिन इस त्रुटि के कारण, पहले से ही वर्कशीट को पाठ और संख्या में प्रारूपित करने की कोशिश की गई है और अभी भी त्रुटि बनी हुई है।

मैंने देखा कि एक व्यक्ति ने इसका उपयोग किया है cell.setCellType ( Cell.CELL_TYPE_STRING ) ; हल किया cell.setCellType ( Cell.CELL_TYPE_STRING ) ; लेकिन मुझे नहीं पता कि मैं इस कोड को अपने कोड में कहां फिट करूं।

WebElement searchbox = driver.findElement(By.name("j_username"));
WebElement searchbox2 = driver.findElement(By.name("j_password"));         

try {
    FileInputStream file = new FileInputStream(new File("C:\\paulo.xls")); 
    HSSFWorkbook workbook = new HSSFWorkbook(file);
    HSSFSheet sheet = workbook.getSheetAt(0);

    for (int i=1; i <= sheet.getLastRowNum(); i++){
        String j_username = sheet.getRow(i).getCell(0).getStringCellValue();
        String j_password = sheet.getRow(i).getCell(0).getStringCellValue();

        searchbox.sendKeys(j_username);
        searchbox2.sendKeys(j_password);
        searchbox.submit();  

        driver.manage().timeouts().implicitlyWait(10000, TimeUnit.MILLISECONDS);
    }

    workbook.close();
    file.close();
} catch (FileNotFoundException fnfe) {
    fnfe.printStackTrace();
} catch (IOException ioe) {
    ioe.printStackTrace();

कोड का उपयोग करें
cell.setCellType(Cell.CELL_TYPE_STRING);
स्ट्रिंग मान को पढ़ने से पहले, जो आपकी मदद कर सकता है।
मैं POI संस्करण 3.17 Beta1 संस्करण का उपयोग कर रहा हूं, निश्चित रूप से संस्करण संगतता भी ..


फॉर्मेट इस मामले में ठीक काम करेगा।

import org.apache.poi.ss.usermodel.DataFormatter;

FileInputStream fis = new FileInputStream(workbookName);
Workbook workbook = WorkbookFactory.create(fis);
Sheet sheet = workbook.getSheet(sheetName);
DataFormatter formatter = new DataFormatter();
String val = formatter.formatCellValue(sheet.getRow(row).getCell(col));
list.add(val);   //Adding value to list

यदि आप सेलिएटर के साथ पंक्तियों में प्रसंस्करण कर रहे हैं .... तो यह मेरे लिए काम करता है ...।

  DataFormatter formatter = new DataFormatter();   
  while(cellIterator.hasNext())
  {                         
        cell = cellIterator.next();
        String val = "";            
        switch(cell.getCellType()) 
        {
            case Cell.CELL_TYPE_NUMERIC:
                val = String.valueOf(formatter.formatCellValue(cell));
                break;
            case Cell.CELL_TYPE_STRING:
                val = formatter.formatCellValue(cell);
                break;
        }
    .....
    .....
  }

यह त्रुटि को हल करने के अन्य तरीकों में से एक है: "एक संख्यात्मक सेल" पोई "से एक पाठ मूल्य नहीं मिल सकता है"

एक्सेल शीट पर जाएं। ड्रैग करें और न्यूमेरिक्स चुनें, जिसे आप एक्सेल शीट से डेटा आयात कर रहे हैं। स्वरूप> संख्या> पर जाएं फिर "सादा पाठ" चुनें। फिर .xlsx के रूप में निर्यात करें। अब स्क्रिप्ट चलाने का प्रयास करें

आशा है कि ठीक काम करता है ...!

एक संख्यात्मक सेल "Poi" .img से एक पाठ मान प्राप्त नहीं कर सकता


    Cell cell = sheet.getRow(i).getCell(0);
    cell.setCellType ( Cell.CELL_TYPE_STRING );
    String j_username = cell.getStringCellValue();

अद्यतन करें

ठीक है, जैसा कि टिप्पणियों में कहा गया है, इस काम के बावजूद यह एक्सेल की सेल से डेटा प्राप्त करने का सही तरीका नहीं है।

here मैनुअल के अनुसार:

यदि आप क्या करना चाहते हैं तो अपने संख्यात्मक सेल के लिए एक स्ट्रिंग मान प्राप्त करें, बंद करो! यह ऐसा करने का तरीका नहीं है। इसके बजाय, संख्यात्मक या बूलियन या दिनांक सेल के स्ट्रिंग मान लाने के लिए, इसके बजाय DataFormatter का उपयोग करें।

और DataFormatter API के अनुसार

DataFormatter में सेल में संग्रहीत मान को स्वरूपित करने के तरीके होते हैं। यह रिपोर्ट और जीयूआई प्रस्तुतियों के लिए उपयोगी हो सकता है जब आपको एक्सेल में दिखाई देने वाले डेटा को ठीक से प्रदर्शित करने की आवश्यकता होती है। समर्थित स्वरूपों में मुद्रा, SSN, प्रतिशत, दशमलव, दिनांक, फ़ोन नंबर, ज़िप कोड आदि शामिल हैं।

इसलिए, संख्यात्मक सेल का मान दिखाने का सही तरीका निम्न है:

 DataFormatter formatter = new DataFormatter(); //creating formatter using the default locale
 Cell cell = sheet.getRow(i).getCell(0);
 String j_username = formatter.formatCellValue(cell); //Returns the formatted value of a cell as a String regardless of the cell type.

public class B3PassingExcelDataBase {


    @Test()
    //Import the data::row start at 3 and column at 1: 
    public static void imortingData () throws IOException {

        FileInputStream  file=new         FileInputStream("/Users/Downloads/Book2.xlsx");
        XSSFWorkbook book=new XSSFWorkbook(file);
        XSSFSheet sheet=book.getSheet("Sheet1");

        int rowNum=sheet.getLastRowNum();
        System.out.println(rowNum);

        //get the row and value and assigned to variable to use in application
        for (int r=3;r<rowNum;r++) {

            // Rows stays same but column num changes and this is for only one person. It iterate for other.
             XSSFRow currentRow=sheet.getRow(r);

             String fName=currentRow.getCell(1).toString();
             String lName=currentRow.getCell(2).toString();
             String phone=currentRow.getCell(3).toString();
             String email=currentRow.getCell(4).toString()

               //passing the data
                yogen.findElement(By.name("firstName")).sendKeys(fName);    ;
                yogen.findElement(By.name("lastName")).sendKeys(lName); ;
                yogen.findElement(By.name("phone")).sendKeys(phone);    ;

        }

        yogen.close();


    }

}

CellType cell = row.getCell(j).getCellTypeEnum();

switch(cell) {
    case NUMERIC:
        intVal = row.getCell(j).getNumericCellValue();
        System.out.print(intVal);
        break;
    case STRING:
        stringVal = row.getCell(j).getStringCellValue();
        System.out.print(stringVal);
        break;
}




apache-poi