숫자 셀 "Poi"에서 텍스트 값을 가져올 수 없습니다.
Excel에서 스프레드 시트의 데이터를 사용하려고하는데 항상이 오류가 발생하여 이미 워크 시트를 텍스트와 숫자로 서식 지정을 시도했지만 여전히 오류가 지속됩니다.
나는 그것을 사용하는 사람이 해결되는 것을 보았지만 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();
이 경우 포맷터가 제대로 작동합니다.
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
Cell cell = sheet.getRow(i).getCell(0);
cell.setCellType ( Cell.CELL_TYPE_STRING );
String j_username = cell.getStringCellValue();
최신 정보
좋아, 주석에서 말했듯이,이 작업에도 불구하고 Excel의 셀에서 데이터를 검색하는 올바른 방법이 아닙니다.
여기 설명서에 따르면 :
원하는 것이 숫자 셀에 대한 문자열 값을 얻는 것이라면 중지하십시오!. 이것은 그것을하는 방법이 아닙니다. 대신 숫자, 부울 또는 날짜 셀의 문자열 값을 가져 오려면 대신 DataFormatter를 사용하십시오.
그리고 DataFormatter API 에 따르면
DataFormatter에는 Cell에 저장된 값의 형식을 지정하는 메서드가 포함되어 있습니다. 이 기능은 Excel에 표시되는 데이터를 정확히 표시해야 할 때 보고서 및 GUI 프레젠테이션에 유용 할 수 있습니다. 지원되는 형식에는 통화, 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.
에서 설명하고있는 바와 같이 아파치 POI Javadoc과 , 당신은 안 사용하는 cell.setCellType(Cell.CELL_TYPE_STRING)
모든 서식을 잃어 버릴 것 같은 숫자 셀의 문자열 값을 얻기 위해
대신 javadocs가 설명 하는대로 DataFormatter 를 사용해야합니다.
DataFormatter가하는 일은 파일에 적용된 서식 규칙과 함께 셀이 파일에 저장되었음을 나타내는 부동 소수점 값을 가져 와서 Excel에서 셀이 수행하는 것과 같은 문자열을 반환하는 것입니다.
따라서 Excel에서 보는 것처럼 셀 문자열을 찾고 있다면 다음을 수행하십시오.
// Create a formatter, do this once
DataFormatter formatter = new DataFormatter(Locale.US);
.....
for (int i=1; i <= sheet.getLastRowNum(); i++) {
Row r = sheet.getRow(i);
if (r == null) {
// empty row, skip
} else {
String j_username = formatter.formatCellValue(row.getCell(0));
String j_password = formatter.formatCellValue(row.getCell(1));
// Use these
}
}
포맷터는 문자열 셀을있는 그대로 반환하고 숫자 셀의 경우 스타일에 대한 서식 규칙을 셀 번호에 적용합니다.
DataFormatter
이 문제를 사용하면 해결되었습니다. 초기 게시물에 대한 "Gagravarr"에게 감사드립니다.
DataFormatter formatter = new DataFormatter();
String empno = formatter.formatCellValue(cell0);
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;
}
cell.setCellType(Cell.CELL_TYPE_STRING);
문자열 값을 읽기 전에 코드 를 사용하면 도움이 될 수 있습니다.
POI 버전 3.17 Beta1 버전을 사용하고 있습니다. 버전 호환성도 확인하세요.
그 코드를 사용하면 확실히 작동하고 수정했습니다.
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) {
}
}
}
이것은 오류를 해결하는 다른 방법 중 하나입니다. "숫자 셀"Poi "에서 텍스트 값을 가져올 수 없습니다."
Excel 시트로 이동합니다. Excel 시트에서 데이터를 가져 오는 숫자를 끌어서 선택합니다. 포맷> 숫자> "일반 텍스트"를 선택한 다음 .xlsx로 내보내기로 이동합니다. 이제 스크립트를 실행 해보십시오.
희망은 잘 작동합니다 ...!
숫자 셀 "Poi".img에서 텍스트 값을 가져올 수 없습니다.
cellIterator를 사용하여 행을 처리하는 경우 .... 이것은 나를 위해 일했습니다 ....
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;
}
.....
.....
}
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();
}
}
이것은 작동합니다 :
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++){
HSSFCell j_username = sheet.getRow(i).getCell(0)
HSSFCell j_password = sheet.getRow(i).getCell(0)
//Setting the Cell type as String
j_username.setCellType(j_username.CELL_TYPE_STRING)
j_password.setCellType(j_password.CELL_TYPE_STRING)
searchbox.sendKeys(j_username.toString());
searchbox2.sendKeys(j_password.toString());
searchbox.submit();
driver.manage().timeouts().implicitlyWait(10000, TimeUnit.MILLISECONDS);
}
workbook.close();
file.close();
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
참조 URL : https://stackoverflow.com/questions/30125465/cannot-get-a-text-value-from-a-numeric-cell-poi
'your programing' 카테고리의 다른 글
오류 SQL Server Management Studio의 잘못된 접두사 또는 접미사 문자 (0) | 2020.12.29 |
---|---|
Alamofire에서 값을 반환하는 방법 (0) | 2020.12.29 |
화물 설치에 동일한 업데이트 명령이 있습니까? (0) | 2020.12.29 |
바로 가기로 Android Studio에서 오류 줄을 탐색하는 방법은 무엇입니까? (0) | 2020.12.29 |
PHP-MySQL 또는 MySQLi에서 가장 빠른 것은 무엇입니까? (0) | 2020.12.29 |