介绍
我指的是xlw,Mark Joshi 和其他人的 Excel C API 包装器。
在开始我的示例、我的试验和我的问题之前,关于如何重现这些代码的几句话:xlw
从其网站下载并安装后,您应该找到一个名为 的文件夹XLL_Project
,其内容是 Visual Studio 解决方案 (" Template.sln ") 如果在安装过程中选择了这个 IDE/平台;此解决方案由 a cppinterface.h
(即定义最终 .xll 中应存在哪些函数)的头文件和source.cpp
指定所述函数应如何运行的 a 组成。
代码
让一个像下面这样的接口函数是 incppinterface.h
并且它的行为是 in source.cpp
:
// ===== cppinterface.h =====
std::string // Asks the user to enter the number of pancakes eaten for breakfast by different people. Analyzes the data and output which person ate the most pancakes
PancakeGlutton(const MyArray& people, // Range of people
const MyArray& pancakeNumber // Range of pancakes eaten by each person
);
// ===== source.pp =====
std::string PancakeGlutton(const MyArray& people, const MyArray& pancakeNumber)
{
if (people.size() != pancakeNumber.size())
throw("Error: arrays must have the same dimension!");
std::map< std::string, int > myMap;
for (unsigned long i = 0; i < people.size(); i++)
{
myMap.insert(std::pair< std::string, int >(people[i], pancakeNumber[i]));
}
return "x"; // Of course this a strange output just for the sake of this example
}
如您所见,尝试std::map< std::string, int >
使用xlw
类填充 a MyArray
:在 Excel 电子表格中people
可能是一系列字符串,因此 C++ 代码应该看到类似 a 的内容std::vector< std::string >
,因此它应该使用它来填充myMap
适当的std::pair< std::string, int >
.
但是,这不会建立。
主要问题是MyArray
定义typedef
在mycontainers.h
:
// ===== mycontainers.h =====
// Line 68
// ...
typedef std::vector<double> MyArray;
因此,它不可能被翻译成能够管理字符串的容器:只是加倍。尽管在他书中xlw
与Joshi相关的章节中说......
[...] 该类
MyArray
也通过typedef
in定义MyContainers.h
。默认为typedef
tostd::vector
。它必须具有.size()
一个构造函数,该构造函数采用大小并已operator[]
定义。
...添加是不够的
typedef std::vector< std::string > MyStrArray;
既不mycontainers.h
是我项目的任何头文件,也不是我的项目的任何头文件。
问题
- 如何
std::map< std::string, int>
通过从 Excel 读取一系列字符串来填充它? - 如何
typedef
根据我想要的类型/类定义新容器,以管理来自 Excel 的所有可能输入?