아파치 POI용 스칼라 래퍼가 있습니까?
Scala 앱에서 Apache POI를 사용하여 Excel 파일을 읽거나 만들고 싶습니다.물론 POI 라이브러리를 직접 사용할 수도 있고, 역시 자바지만 스칼라 느낌을 받고 싶습니다.그렇다면 스칼라 느낌(암묵적 변환 사용)을 가져오는 스칼라 래퍼가 있습니까? 즉, 어떤 종류의 "스칼라-POI-DSL"을 무료로 사용할 수 있습니까?
데이브 그리피스의 답변 덕분에, 나는 그의 DSL과 비슷한 것을 해킹했습니다.
Workbook {
Sheet("name") {
Row(1) {
Cell(1, "data") :: Cell(2, "data2") :: Nil
} ::
Row(2) {
Cell(1, "data") :: Cell(2, "data2") :: Nil
} :: Nil
} ::
Sheet("name2") {
Row(2) {
Cell(1, "data") :: Cell(2, "data2") :: Nil
} :: Nil
} :: Nil
}.save("/home/path/ok.xls")
코드는 여기에서 찾을 수 있습니다.
스칼라를 위한 고급 오픈 소스 스프레드시트 래퍼가 부족하기 때문에 Spoiwo: https://github.com/norbert-radyk/spoiwo 의 개발을 시작했습니다.XSSF 워크북을 생성할 수 있으며 POI 기능의 상당 부분을 지원합니다.
여전히 약간의 문서가 필요하지만, 다음은 그 기능에 대한 대략적인 정보를 제공합니다.
Spoiwo를 사용한 단순 스프레드시트의 예:
object GettingStartedExample {
val headerStyle =
CellStyle(fillPattern = CellFill.Solid, fillForegroundColor = Color.AquaMarine, fillBackgroundColor = Color.AquaMarine, font = Font(bold = true))
val gettingStartedSheet = Sheet(name = "Some serious stuff")
.withRows(
Row(style = headerStyle).withCellValues("NAME", "BIRTH DATE", "DIED AGED", "FEMALE"),
Row().withCellValues("Marie Curie", new LocalDate(1867, 11, 7), 66, true),
Row().withCellValues("Albert Einstein", new LocalDate(1879, 3, 14), 76, false),
Row().withCellValues("Erwin Shrodinger", new LocalDate(1887, 8, 12), 73, false)
)
.withColumns(
Column(index = 0, style = CellStyle(font = Font(bold = true)), autoSized = true)
)
def main(args: Array[String]) {
gettingStartedSheet.saveAsXlsx("C:\\Reports\\getting_started.xlsx")
}
}
화려한 POI - 찾을 수 있는 정보가 많지 않은 것처럼 보이지만 당신이 찾고 있는 것이 바로 그것인 것 같습니다.
이것은 전혀 도움이 되지 않지만, 저는 POI를 위해 스칼라 스타일의 DSL을 해킹했습니다.다음과 같은 코드를 허용합니다.
Workbook{
Sheet("Multiplication"){
for(i<-1 to 10){
Row{
for(j<-1 to 10){
Cell(i*j)
}
}
}
}
}.writeToFile("multiplication.xls")
안타깝게도 상사에게 확인하지 않고 나눠줄 수는 없지만, 솔직히 그렇게 어렵지는 않았습니다.당신은 그 예에서 대부분을 큰 문제 없이 리버스 엔지니어링할 수 있을 것입니다.
Office XML을 작성하는 경우 POI를 피하고 XML을 직접 작성하는 것을 고려할 수 있습니다(또한 함께 보관할 수도 있습니다.단순한 스프레드시트의 경우 이 작업은 매우 간단하며 많은 변수를 제거할 수 있습니다.
POI의 OOXML 지원을 통해 대용량 스프레드시트(65k 행 이상)를 만들려면 스트리밍 모드를 사용해야 합니다.
이런 종류의 캡슐화를 위한 스칼라 라이브러리는 전혀 모릅니다.
Apache POI 사용과 관련된 대부분의 질문은 반복자에 대한 것입니다.
그리고 alexcheng 프로젝트는 Excel 문서를 가져오기도 하고 테스트 케이스도 가지고 있습니다.
하지만 그게 다예요.
언급URL : https://stackoverflow.com/questions/5032101/is-there-a-scala-wrapper-for-apache-poi
'programing' 카테고리의 다른 글
| "git diff tool"이 툴을 직접 열지 않는 이유는 무엇입니까? (0) | 2023.06.24 |
|---|---|
| 실행 취소 "git add"실행 취소 "git add"”? (0) | 2023.06.24 |
| Excel-VBA에서 파이썬 코드를 호출하는 방법이 있습니까? (0) | 2023.06.24 |
| SQL developer를 사용하여 오라클 DB의 날짜별 레코드 수 및 그룹 수 계산 필요 (0) | 2023.06.19 |
| UI 텍스트 필드의 커서 숨기기 (0) | 2023.06.19 |