안드로이드에서 엑셀 파일을 만드는 방법은?
프로그램적으로 엑셀 파일을 작성해야 합니다.Excel 파일 등을 작성할 수 있는 API가 있습니까?
2011년 11월 7일 편집
이 링크에서 Excel 스프레드시트 만들기 Excel spredsheet 만들기 예시를 사용해 보았습니다.
Null Pointer를 받고 있습니다.예외:workbook.write();
이를 사용하여 SD카드에 엑셀 파일을 만들 수 있지만 MS office 2007을 사용하여 엑셀 파일을 열었을 때,Unable to read file
메세지
여기에서는 스택트레이스택 트레이스,ExcelStudy
제 활동입니다.WriteExcel
학급
W/System.err( 235): java.lang.NullPointerException
W/System.err( 235): at jxl.biff.StringHelper.getUnicodeBytes(StringHelper.java:133)
W/System.err( 235): at jxl.biff.FontRecord.getData(FontRecord.java:289)
W/System.err( 235): at jxl.biff.WritableRecordData.getBytes(WritableRecordData.java:71)
W/System.err( 235): at jxl.write.biff.File.write(File.java:132)
W/System.err( 235): at jxl.biff.Fonts.write(Fonts.java:110)
W/System.err( 235): at jxl.write.biff.WritableWorkbookImpl.write(WritableWorkbookImpl.java:699)
W/System.err( 235): at comm.study.code.WriteExcel.write(WriteExcel.java:49)
W/System.err( 235): at comm.study.code.ExcelStudy.createExcelFile(ExcelStudy.java:64)
W/System.err( 235): at comm.study.code.ExcelStudy$1.onClick(ExcelStudy.java:47)
W/System.err( 235): at android.view.View.performClick(View.java:2364)
W/System.err( 235): at android.view.View.onTouchEvent(View.java:4179)
W/System.err( 235): at android.widget.TextView.onTouchEvent(TextView.java:6541)
W/System.err( 235): at android.view.View.dispatchTouchEvent(View.java:3709)
W/System.err( 235): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
W/System.err( 235): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
W/System.err( 235): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
W/System.err( 235): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
W/System.err( 235): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
W/System.err( 235): at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
W/System.err( 235): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
W/System.err( 235): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
W/System.err( 235): at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err( 235): at android.os.Looper.loop(Looper.java:123)
W/System.err( 235): at android.app.ActivityThread.main(ActivityThread.java:4363)
W/System.err( 235): at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err( 235): at java.lang.reflect.Method.invoke(Method.java:521)
W/System.err( 235): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
W/System.err( 235): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
W/System.err( 235): at dalvik.system.NativeStart.main(Native Method)
먼저 다음 링크에서 최신 라이브러리를 다운로드할 수 있습니다.
http://www.apache.org/dyn/closer.cgi/poi/release/bin/poi-bin-3.9-20121203.tar.gz
그 후 작성 시 또는 재개 시 아래 코드를 입력합니다.
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet firstSheet = workbook.createSheet("Sheet No: 1");
HSSFSheet secondSheet = workbook.createSheet("Sheet No: 2");
HSSFRow rowA = firstSheet.createRow(0);
HSSFCell cellA = rowA.createCell(0);
cellA.setCellValue(new HSSFRichTextString("Sheet One"));
HSSFRow rowB = secondSheet.createRow(0);
HSSFCell cellB = rowB.createCell(0);
cellB.setCellValue(new HSSFRichTextString("Sheet two"));
FileOutputStream fos = null;
try {
String str_path = Environment.getExternalStorageDirectory().toString();
File file ;
file = new File(str_path, getString(R.string.app_name) + ".xls");
fos = new FileOutputStream(file);
workbook.write(fos);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Toast.makeText(MainActivity.this, "Excel Sheet Generated", Toast.LENGTH_SHORT).show();
}
// 이 Excel 파일을 표시하려면 파일익스플로러에 접속합니다.-> SDCard 경로 -> Excel.xls -> 꺼내기 -> 보기
Excel 파일에 쓰거나 Excel 파일에서 읽으려면 http://jexcelapi.sourceforge.net/(이 튜토리얼 참조) 또는 Apache POI를 사용할 수 있습니다.
먼저 앱의 build.gradle에 이러한 의존관계를 추가한 후 다른 답변을 따르십시오.
implementation 'org.apache.poi:poi:3.17'
implementation 'org.apache.poi:poi-ooxml:3.17'
콩반
class Bean {
String initial, firstName, middleName, lastName;
Bean(String initial, String firstName, String middleName, String lastName) {
this.initial = initial;
this.firstName = firstName;
this.middleName = middleName;
this.lastName = lastName;
}
public String getInitial() {
return initial;
}
public String getFirstName() {
return firstName;
}
public String getMiddleName() {
return middleName;
}
public String getLastName() {
return lastName;
}
}
ExcelSheet 작성 코드
sheet.addCell(신규 라벨(0, 0, "NameInitial"));
sheet.addCell(새로운 라벨(columnNumber, rowNumber, dataString));
File directory, sd, file;
WritableWorkbook workbook;
void createExcelSheet() {
String csvFile = "ExcelsheetName.xls";
sd = Environment.getExternalStorageDirectory();
directory = new File(sd.getAbsolutePath());
file = new File(directory, csvFile);
WorkbookSettings wbSettings = new WorkbookSettings();
wbSettings.setLocale(new Locale("en", "EN"));
try {
workbook = Workbook.createWorkbook(file, wbSettings);
createFirstSheet();
createSecondSheet();
//closing cursor
workbook.write();
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
void createFirstSheet() {
try {
List<Bean> listdata = new ArrayList<>();
listdata.add(new Bean("mr","firstName1","middleName1","lastName1"));
listdata.add(new Bean("mr","firstName1","middleName1","lastName1"));
listdata.add(new Bean("mr","firstName1","middleName1","lastName1"));
//Excel sheet name. 0 (number)represents first sheet
WritableSheet sheet = workbook.createSheet("sheet1", 0);
// column and row title
sheet.addCell(new Label(0, 0, "NameInitial"));
sheet.addCell(new Label(1, 0, "firstName"));
sheet.addCell(new Label(2, 0, "middleName"));
sheet.addCell(new Label(3, 0, "lastName"));
for (int i = 0; i < listdata.size(); i++) {
sheet.addCell(new Label(0, i + 1, listdata.get(i).getInitial()));
sheet.addCell(new Label(1, i + 1, listdata.get(i).getFirstName()));
sheet.addCell(new Label(2, i + 1, listdata.get(i).getMiddleName()));
sheet.addCell(new Label(3, i + 1, listdata.get(i).getLastName()));
}
} catch (Exception e) {
e.printStackTrace();
}
}
void createSecondSheet() {
try {
List<Bean> listdata = new ArrayList<>();
listdata.add(new Bean("mr","firstName1","middleName1","lastName1"));
listdata.add(new Bean("mr","firstName1","middleName1","lastName1"));
listdata.add(new Bean("mr","firstName1","middleName1","lastName1"));
//Excel sheet name. 0 (number)represents first sheet
WritableSheet sheet = workbook.createSheet("sheet2", 0);
// column and row title
sheet.addCell(new Label(0, 0, "NameInitial"));
sheet.addCell(new Label(1, 0, "firstName"));
sheet.addCell(new Label(2, 0, "middleName"));
sheet.addCell(new Label(3, 0, "lastName"));
for (int i = 0; i < listdata.size(); i++) {
sheet.addCell(new Label(0, i + 1, listdata.get(i).getInitial()));
sheet.addCell(new Label(1, i + 1, listdata.get(i).getFirstName()));
sheet.addCell(new Label(2, i + 1, listdata.get(i).getMiddleName()));
sheet.addCell(new Label(3, i + 1, listdata.get(i).getLastName()));
}
} catch (Exception e) {
e.printStackTrace();
}
}
Excel Sheet에서 데이터 읽기
public void readDataFromExcelSheet() {
List<Bean> listOfBean = new ArrayList<>();
try {
String filename = "ExcelsheetName.xls";
// Creating Input Stream
File sd = Environment.getExternalStorageDirectory();
File directory = new File(sd.getAbsolutePath());
File file = new File(directory, filename);
Workbook workbook = null;
WorkbookSettings ws = new WorkbookSettings();
ws.setGCDisabled(true);
workbook = Workbook.getWorkbook(file, ws);
int noOfSheets = workbook.getNumberOfSheets();//this is return how many sheets available in excelsheet
String sheetsNames[] = workbook.getSheetNames();//this is return all sheets names available in excelsheet
for (int x = 0; x < noOfSheets; x++)//here take all sheets
{
Sheet sheet = workbook.getSheet(x);//here i taken first sheet
int rowCount = sheet.getRows();//count total number of row or data in that sheet
for (int i = 0; i < rowCount; i++) {//take every row data
Cell[] column = sheet.getRow(i);//take all data of one row
/*
for taking one by one column data
*/
for (int j = 0; j < column.length; j++) {//take every column data of row
System.out.print("" + column[j].getContents() + "\t");//take one by one data
}
/*
for taking column data
*/
listOfBean.add(new Bean(column[0].getContents(), column[1].getContents(), column[2].getContents(), column[3].getContents()));
}
// if you want take different data from different sheets then use switch case
Sheet sheet1;
int rowCount1;
switch (x) {
case 0:
//write code for sheet 0 read data
sheet1 = workbook.getSheet(0);//here i taken first sheet
rowCount1 = sheet1.getRows();//count total number of row or data in that sheet
for (int i = 0; i < rowCount1; i++) {//take every row data
Cell[] column = sheet1.getRow(i);//take all data of one row
listOfBean.add(new Bean(column[0].getContents(), column[1].getContents(), column[2].getContents(), column[3].getContents()));
}
break;
case 1:
//write code for sheet 1 read data
sheet1 = workbook.getSheet(1);//here i taken first sheet
rowCount1 = sheet1.getRows();//count total number of row or data in that sheet
for (int i = 0; i < rowCount1; i++) {//take every row data
Cell[] column = sheet1.getRow(i);//take all data of one row
listOfBean.add(new Bean(column[0].getContents(), column[1].getContents(), column[2].getContents(), column[3].getContents()));
}
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
안드로이드 워크시트 라이브러리를 사용하면 됩니다.
그래플에 추가해 주세요.implementation 'com.github.elirehema:worksheet:0.0.1'
액티비티 클래스의 엉덩이에 실장
public class MainActivity extends AppCompatActivity {
private WorkSheet workSheet;
private Button button;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.create_excel_sheet);
final String path = "ExternalFilePath";
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
workSheet = new WorkSheet.Builder(getApplicationContext(), path)
.setSheet(List<Object>)
.writeSheet();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}}
언급URL : https://stackoverflow.com/questions/8006087/how-to-create-an-excel-file-in-android
'programing' 카테고리의 다른 글
Excel 함수를 사용하여 문자열의 마지막 문자를 얻으려면 어떻게 해야 합니까? (0) | 2023.04.17 |
---|---|
문자열 목록 요소에서 후행 줄 바꿈 제거 (0) | 2023.04.17 |
Bash를 사용하여 마지막 명령어의 출력을 자동으로 변수에 캡처하시겠습니까? (0) | 2023.04.17 |
JavaScript 문자열을 모두 소문자로 변환 (0) | 2023.04.17 |
git 브랜치 이름을 붙이기 위해 일반적으로 사용되는 프랙티스의 예는 무엇입니까? (0) | 2023.04.17 |