BTW, there is another version which is translated from VB6's declaration. No 
`handle.h` is need as the above version does. However, maybe it works only on 
windows (or windows 64 bits?) 
    
    
    import encodings
    import strformat
    
    type
        Integer = int16
        Long = int64
        Double = cdouble
        String = Widecstring
    
    const
        xldll* = "libxl.dll"
    
    proc xlCreateBook*(): Long  {.cdecl, importc: "xlCreateBookW", dynlib: 
xldll, discardable.}
    
    proc xlBookLoad*(bookHandle: Long, filename: String): Integer  {.cdecl, 
importc: "xlBookLoadW", dynlib: xldll, discardable.}
    
    proc xlBookSave*(bookHandle: Long, filename: String): Integer {.cdecl, 
importc: "xlBookSaveW", dynlib: xldll, discardable.}
    
    proc xlBookGetSheet*(bookHandle: Long, index: Integer): Long {.cdecl, 
importc: "xlBookGetSheetW", dynlib: xldll, discardable.}
    
    proc xlSheetReadStr*(sheetHandle: Long, row: Integer, col: Integer, format: 
Long): String {.cdecl, importc: "xlSheetReadStrW", dynlib: xldll, discardable.}
    
    proc xlSheetWriteStr*(sheetHandle: Long, row: Integer, col: Integer, value: 
String, formatHandle: Long): Integer {.cdecl, importc: "xlSheetWriteStrW", 
dynlib: xldll, discardable.}
    
    proc xlSheetReadNum*(sheetHandle: Long, row: Integer, col: Integer, format: 
Long): Double {.cdecl, importc: "xlSheetReadNumW", dynlib: xldll, discardable.}
    
    proc xlSheetWriteNum*(sheetHandle: Long, row: Integer, col: Integer, value: 
Double, formatHandle: Long): Integer {.cdecl, importc: "xlSheetWriteNumW", 
dynlib: xldll, discardable.}
    
    proc xlBookRelease*(bookHandle: Long): void {.cdecl, importc: 
"xlBookReleaseW", dynlib: xldll.}
    
    
    var book = xlCreateBook();
    
    if  book > 0:
        if xlBookLoad(book, newWideCString("example.xls")) > 0 :
            
            var sheet = xlBookGetSheet(book, 0);
            if sheet > 0:
                var s = xlSheetReadStr(sheet, 2, 1, 0);
                
                if len(s) > 0:
                    echo(fmt"{s}");
                
                var d = xlSheetReadNum(sheet, 3, 1, 0);
                echo(fmt"{d}");
                
                xlSheetWriteNum(sheet, 3, 2, 3.1415926, 0);
                
                var st = xlSheetReadStr(sheet, 3, 1, 0);
                echo(fmt"{st}");
                
                xlSheetWriteStr(sheet, 3, 1, newWideCString("汉字"), 0);
                
                if(xlBookSave(book, newWideCString("out.xls"))>0):
                    echo("\nFile example.xls has been modified.\n");
        
        xlBookRelease(book);
    
    
    Run

Reply via email to