source

Haskell을 사용한 Excel 자동화로 세그먼트 결함 발생

lovecheck 2023. 4. 27. 22:33
반응형

Haskell을 사용한 Excel 자동화로 세그먼트 결함 발생

나는 다음 스크립트로 엑셀을 작동시킬 수 있습니다.그러나 ghci(7.4.1)를 실행할 때 분할 오류가 발생합니다.

지금부터 어디를 검색해야 할지 모르겠습니다.라인을 제거해도 이 오류가 발생하지 않습니다.

workSheets <- workBook #  propertyGet_0 "Worksheets"

여기 코드가 있습니다.뭔가를 잊어버린 것 같아요.여기서 com.hs의 소스 코드를 읽었는데, 아무런 단서가 되지 않습니다.

import System.Win32.Com 
import System.Win32.Com.Automation
--
-- createObjectExcel 
-- coming from Automation.hs and com.hs
--

iidIDispatch_unsafe  = mkIID "{00020400-0000-0000-C000-000000000046}"

createObjExl :: IO (IDispatch ()) 
createObjExl = do
    clsidExcel <- clsidFromProgID "Excel.Application"
    pExl <- coCreateInstance clsidExcel  Nothing LocalProcess iidIDispatch_unsafe
    return pExl


fichierTest2 = "E:/Programmation/haskell/Com/qos1.xls"

main = coRun $ do 
    pExl <- createObjExl
    workBooks <- pExl #  propertyGet_0 "Workbooks"
    workBook <- workBooks #  propertyGet_1 "Open" fichierTest2
    workSheets <- workBook #  propertyGet_0 "Worksheets"

    workBooks # method_1_0 "Close" (0::Int)
    pExl # method_0_0 "Quit"

    mapM release [workSheets,workBook, workBooks, pExl]

Gonzalez의 조언으로 편집해보니 디버깅을 해보았지만 아무런 정보도 나오지 않았습니다.손으로 ghci로 코드를 시도해보니 유죄인 당사자가 릴리스 기능인 것 같습니다.

다음 ingci를 입력했을 때 분할 오류가 발생했습니다.

*Main> coInitialize
*Main> pExl <- createObjExl
*Main> release pExl
0

이제 "pExl"을 누르면 참조가 있습니다.Null로 설정해야 하지 않습니까?

*Main> pExl
<interface pointer = 0x020844cc>

*Main> coUnInitialize
*Main> :q
leaving Ghci
Segmentation Fault/access violation ...

당신은 아마도 전화할 것입니다.workSheets정적 함수 내의 메서드입니다.한 번 빼보세요.

또는 '워크시트'의 데이터 유형을 명시적으로 선언해 보셨습니까?

WorkSheets :: Int -> Int또는 (임의 유형이어야 함).

언급URL : https://stackoverflow.com/questions/14537516/excel-automation-with-haskell-gives-a-seg-fault

반응형