1

嗨,我正在使用 ExcelFormat 库从包含一些 unicode 字符的 excel 文件 (.xls) 中提取一些内容,这是代码

BasicExcel xls(from);

XLSFormatManager fmt_mgr(xls);
BasicExcelWorksheet* sheet = xls.GetWorksheet(0);

CellFormat fmt_general(fmt_mgr);

fmt_general.set_format_string("0.000");

for (int y = 0; y<2; ++y) {
    for (int x = 0; x<2; ++x) {

        BasicExcelCell* cell = sheet->Cell(y, x);

        cout << sheet->Cell(y, x)->GetWString();

        CellFormat fmt(fmt_mgr, cell);

        const Workbook::Font& font = fmt_mgr.get_font(fmt);
        string font_name = stringFromSmallString(font.name_);

        const wstring& fmt_string = fmt.get_format_string();

        cell->SetFormat(fmt_general);

        cout << endl;
    }
}

cout << "write: " << from << endl;
xls.SaveAs(to);

此代码运行良好,它使用 unicode 字符正确复制 excel 文件,但在将数据保存到新文件之前,如果字符串不在 unicode 中,我需要对其进行一些操作,我可以使用它

sheet->Cell(y, x)->GetString();

它工作正常,但是当我有 unicode 数据时,即使使用

sheet->Cell(y, x)->GetWString();

因为它返回一些数字而我无法使用它我应该如何将 GetWstring 的结果转换为适当的文本格式

4

3 回答 3

1
cout << sheet->Cell(y, x)->GetWString();

GetWString返回wchar_t*cout不知道该怎么做-您应该wcout改用它。

于 2013-10-30T17:42:40.383 回答
1

从我能找到的最接近 API 的东西:

const wchar_t* GetWString() const   Get an Unicode string. Returns 0 if cell 
                                    does not contain an Unicode string.

来自文章:

http://www.codeproject.com/Articles/13852/BasicExcel-A-Class-to-Read-and-Write-to-Microsoft

于 2013-10-30T18:15:27.117 回答
0

在挖掘了一些其他库之后,我发现libxl很好,并且与 unicode 和其他语言兼容

#include "libxl.h"
using namespace libxl;

int main() 
{
    Book* book = xlCreateBook(); // xlCreateXMLBook() for xlsx
    if(book)
    {
        Sheet* sheet = book->addSheet(L"Sheet1");
        if(sheet)
        {
            sheet->writeStr(2, 1, L"Hello, World !");
            sheet->writeNum(3, 1, 1000);
        }
        book->save(L"example.xls");
        book->release();
    } 
}

但是这个库不是免费的,我认为你可以解析 100 个单元格或行,但不能用于 linux windows 和 mac

于 2013-11-01T23:56:58.483 回答