Что такое простая и надежная библиотека C для работы с файлами Excel? [закрытый]

Компиляторы иногда отбрасывают отладочную информацию для «неиспользуемых идентификаторов». Отладочная информация может быстро стать огромной, поэтому даже при -O0 компиляторам придется проделать определенную работу, чтобы гарантировать, что они не выдают больше информации, чем необходимо. Определение «нужного» сложнее сказать, чем сделать, но, безусловно, оно должно сохранить все локальные переменные и давайте.

Так что, мне кажется, этот стоит написать об ошибке на быстром компиляторе. Особенно странно, что swiftc выдает отладочную информацию для ny, но не nx. Вы используете ny позже в этой функции?

Если вы регистрируете ошибку, пожалуйста, включите в нее сборочный файл .swift или проект, который показывает ошибку.

29
задан pnuts 11 September 2015 в 07:02
поделиться

4 ответа

Сильно препятствовавший. Я рекомендовал бы использовать формат C-friendly (например, CSVs) вместо XLS, или использовать новое XML форматы (выберите на библиотеках XML и ZIP).

однако, для быстрого исправления, Вы могли экспортировать в заключенный в кавычки CSV и затем импортировать использование VBScript. Что-то как это , хотя я попытался бы заставить это работать в VBA сначала.

Примечание, что это потребует копии Office и не масштабируется хорошо (но Вы может скрывать окно Excel).

<час>

я только что нашел xlsLib, поэтому если действительно необходимо записать непосредственно в C, дайте ему движение! Будьте осторожны, хотя, потому что очень трудно разобраться, особенно если Вы пишете в уже существующие файлы.

Там также существует LibExcel, но это - C++, таким образом, необходимо было бы скомпилировать обертку вокруг или переписать для C.

<час>

Один заключительный протест: причина я не искал их в запуске, состоит в том, что чрезвычайно трудно разобраться. Я не пользовался библиотеками выше, но я подозреваю, что они прервут странные и необычные пути. Я полагаю, что Вы читали , Joel берет форматы Office.

12
ответ дан Mark 28 November 2019 в 02:01
поделиться

Excel, как другие Продукты Office, экспортирует свои кишки по COM. Это доступно для использования в C++, VB, C#, и независимо от того, что другие языки имеют взаимодействующий с COM - при условии, что Вы работаете в Windows и установили Excel. (Вы не можете добраться до COM из плоскости C. Удачно ли это, или неудачный ваше дело.)

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;
}
12
ответ дан ephemient 28 November 2019 в 02:01
поделиться

У меня есть маленькое расширение материала ephemient, отправил. Существует очень удобная библиотека, доступная с простотой огорченное с интерфейсом IDispatch. http://disphelper.sourceforge.net/

Это - всего один файл, который Вы добавляете к своим проектам, но это делает IDispatch, программирующий с C почти забава ;-)

2
ответ дан Friedrich 28 November 2019 в 02:01
поделиться

Свободная библиотека, но опять-таки это C++, а не C: ExcelFormat

3
ответ дан 28 November 2019 в 02:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: