嗯......就是这样。
我需要一些简单而可靠的(不必有花哨的功能-我需要写入和读取Excel单元格的文字和数字)
是的,我想要一个示例“Hello Cell”代码 ......
您有什么推荐的吗?
发布于 2019-06-05 09:25:29
与其他Office产品一样,Excel通过COM导出其内容。这可用于C ++,VB,C#以及其他任何具有COM互操作的语言 - 前提是您在Windows中运行并安装了Excel。(你无法从普通的C获得COM。这是幸运的还是不幸的取决于你。)
不过,对于非托管语言来说,COM是一种血腥的混乱痛苦。以下VB:
Set objExcel = CreateObject("Excel.Application") ' start or use existing Excel
objExcel.Visible = True ' show the window
objExcel.Workbooks.Add ' create an empty workbook
大致翻译成以下C ++:
#include <assert.h>
#include <ole2.h>
#include <tchar.h>
int main() {
HRESULT hr;
IDispatch *objExcel, *objWorkbooks;
CLSID clsid;
DISPID id, id2;
DISPPARAMS p;
VARIANT v;
TCHAR *name;
CoInitialize(NULL);
hr = CLSIDFromProgID(_T("Excel.Application"), &clsid);
assert(SUCCEEDED(hr));
hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER,
IID_IDispatch, (LPVOID *)&objExcel);
assert(SUCCEEDED(hr));
id2 = DISPID_PROPERTYPUT;
name = _T("Visible");
hr = objExcel->GetIDsOfNames(IID_NULL, &name, 1, LOCALE_USER_DEFAULT, &id);
assert(SUCCEEDED(hr));
VariantInit(&v);
v.vt = VT_I4;
v.lVal = 1;
p.cArgs = 1;
p.rgvarg = &v;
p.cNamedArgs = 1;
p.rgdispidNamedArgs = &id2;
hr = objExcel->Invoke(id, IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYPUT, &p, NULL, NULL, NULL);
assert(SUCCEEDED(hr));
name = _T("Workbooks");
hr = objExcel->GetIDsOfNames(IID_NULL, &name, 1, LOCALE_USER_DEFAULT, &id);
assert(SUCCEEDED(hr));
p.cArgs = 0;
p.rgvarg = NULL;
p.cNamedArgs = 0;
p.rgdispidNamedArgs = NULL;
hr = objExcel->Invoke(id, IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET, &p, &v, NULL, NULL);
assert(SUCCEEDED(hr));
objWorkbooks = v.pdispVal;
name = _T("Add");
hr = objWorkbooks->GetIDsOfNames(IID_NULL, &name, 1, LOCALE_USER_DEFAULT, &id);
assert(SUCCEEDED(hr));
p.cArgs = 0;
p.rgvarg = NULL;
p.cNamedArgs = 0;
p.rgdispidNamedArgs = NULL;
hr = objWorkbooks->Invoke(id, IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET, &p, NULL, NULL, NULL);
assert(SUCCEEDED(hr));
return 0;
}
发布于 2019-06-05 11:16:32
另一种选择是使用libxlsxwriter,一个用于编写 Excel XLSX文件的C库。但是,它无法读取 Excel文件,也不支持XLS文件。
https://stackoverflow.com/questions/-100001239
复制相似问题