1

介绍

我指的是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定义typedefmycontainers.h

// ===== mycontainers.h =====
// Line 68
// ...
   typedef std::vector<double> MyArray;

因此,它不可能被翻译成能够管理字符串的容器:只是加倍。尽管在他书中xlw与Joshi相关的章节中说......

[...] 该类MyArray也通过typedefin定义MyContainers.h。默认为typedefto std::vector。它必须具有.size()一个构造函数,该构造函数采用大小并已operator[]定义。

...添加是不够的

typedef std::vector< std::string > MyStrArray;

既不mycontainers.h是我项目的任何头文件,也不是我的项目的任何头文件。

问题

  1. 如何std::map< std::string, int>通过从 Excel 读取一系列字符串来填充它?
  2. 如何 typedef根据我想要的类型/类定义新容器,以管理来自 Excel 的所有可能输入?
4

1 回答 1

2

MyArray 类仅用于表示双精度数组。typedef 是为了让你可以使用你最喜欢的此类。

CellMatrix 类允许您输入任何类型的数据。您只需测试 CellMatrix 的每个元素的类型,然后用它做您想做的事情。

于 2016-06-15T11:13:36.483 回答