2014-04-08 3 views
1

Apache POI API를 사용하여 Excel에서 .xlsx 파일에 액세스하고 API를 사용하여 셀을 읽고 쓸 수 있습니다. 문제점 : Excel GUI에서 열리는 .xlsx 파일로 어떻게 할 수 있습니까? 동일한 리소스에 대한 동시 액세스로 인해 충돌이 발생합니다 (프로세스가 다른 프로세스에서 사용 중이므로 파일에 액세스 할 수 없음). 답변이 Excel RTD 및 C#, C++ 또는 다른 언어라고 들었습니다. 하지만 자바를 계속 사용하고 싶습니다. 어떻게해야합니까? 리눅스로 전환하고 있습니까? 감사합니다.Apache POI 및 EXCEL

+2

2 개의 프로세스에서 동시에 r/w로 동일한 파일에 액세스하려는 특별한 이유는 무엇입니까? – Morfic

+0

FIX 연결에서 얻은 라이브 BID/ASK 따옴표를 업데이트하고 싶습니다. 또한 트랜잭션을 저장하기 위해이 파일을 사용하여 실시간으로 업데이트되는 동안 파일을 볼 기회를 갖는 것이 매우 유리할 것입니다. – user3139149

답변

1

AFAIK poi는 파일 ​​시스템에서만 작동하므로 실시간 데이터를 통한 상호 작용은 없습니다. 나는 당신이 손상을 막고 싶다면 여전히 엑셀에서 열리는 동안 xlsx 파일을 편집하지 말아야한다고 생각합니다.

RTD를 사용하려는 경우이를위한 Java 바인딩을 찾아야합니다. 나는 그들이 COM 기반이라고 생각합니다. 아마 JACOB이 당신을 도울 수 있습니다. http://sourceforge.net/p/jacob-project/discussion/375946/thread/946012e8/

오 : http://sourceforge.net/projects/jacob-project/

는이 설명을 참조하십시오. Btw. COM은 Windows 전용이므로 Windows에 남아있게됩니다.

+0

다음과 같은 기능을 사용하는 다른 .xlsx 파일이 필요함 = 'C : \ Excel \ [data.xlsx] Foglio1'! $ A $ 1은 쉬운 수정이 아닙니다. 맞습니까? – user3139149

0

두 개의 별도 엔티티로 동시에 액세스하고 수정하는 것이 양 끝에서 동기화 된 버전으로 끝나야 함을 의미하지는 않습니다. 반대로, 그렇게 할 수 있다면, 잘못된/가짜/손상된 결과로 끝날 가능성이 있습니다. 자바로 번역하면 변수를 비동기 방식으로 변경하는 다중 스레드로 생각할 수 있습니다.

일부 프로그램 (notepad ++, idea, 편집기 재 활성화시 Eclipse 등)은 파일 자체가 프로그램 외부의 파일 시스템에서 수정되었는지 감지하는 추가 메커니즘을 구현했으며 다음과 같은 옵션을 제공합니다. reload 파일을 무시하고, 수정 사항을 무시하고, 병합 등, 다른 사람들은 단순히 파일을 덮어 쓰는 이러한 변경 사항을 무시합니다.

제 생각 엔 파일을 업데이트하고 알림을 트리거하는 것과 비슷한 일을하거나 상황을 재고해야합니다.

0

다른 사용자가 말했듯이, poi에서이를 수행 할 방법이 없습니다. 옵션 :

가장 좋은 옵션은 C#으로가는 RTD "서버"를 작성하고 레지스트리에 설치 한 다음 일부 소켓을 통해 Java와 대화하고 Excel에서 RTD 수식을 그들의 세포는 엑셀이 rtd 서버를 호출하여 최신 데이터를 얻는다).

또한 COM을 사용하여 Excel에 직접 데이터를 쓸 수도 있습니다 (teamdev의 jexcel과 같은 java 라이브러리가 있거나 사용자가 직접 com 래퍼를 작성할 수 있습니다).

자신 만의 Excel 플러그인을 작성할 수 있습니다.

마지막으로 이야기를들은 적이 있지만 이해하지 못한 저급 솔루션이 있습니다.