[M1 Mac, Big Sur 11.6.5, Python 3.10.4]
前回の続きです。
for文はワンライナーで書けば、PyRun_SimpleString()に使えます。バックスラッシュを入れてもOKです。
リスト内包表記のワンライナーは多用していましたが、if文やfor文の中身をカンマでつなぐとワンライナーになるというのは知りませんでした。
#include </Library/Frameworks/Python.framework/Versions/3.10/include/python3.10/Python.h>
#include <iostream>
#include <string.h>
using std::string;
int main() {
Py_Initialize();
PyRun_SimpleString("import openpyxl");
PyRun_SimpleString("wb = openpyxl.load_workbook('test.xlsx')");
PyRun_SimpleString("ws = wb.worksheets[0]");
PyRun_SimpleString("color_name = []");
PyRun_SimpleString("color_code = []");
string str = "for cell in ws['A']: color_name.append(cell.value), color_code.append(cell.fill.fgColor.rgb)";
// バックスラッシュを使う場合
// string str = "for cell in ws['A']: \
// color_name.append(cell.value), color_code.append(cell.fill.fgColor.rgb)";
PyRun_SimpleString(str.c_str());
PyRun_SimpleString("print(color_name)");
PyRun_SimpleString("print(color_code)");
Py_Finalize();
return 0;
}