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