엑셀 파일 작업을 위한 간단하고 신뢰할 수 있는 C 라이브러리는 무엇입니까?
음... 그게 다야.
저는 간단하고 신뢰할 수 있는 것이 필요합니다(멋진 기능을 가질 필요는 없습니다 - 엑셀 셀에서 텍스트와 숫자를 쓰고 읽어야 합니다).
그리고 예, "헬로 셀" 코드 샘플을 원합니다.
무엇을 추천하시겠습니까?
매우 낙담했습니다.XLS 대신 C-friendly 형식(예: CSV)을 사용하거나 새로운 XML 형식(XML 및 ZIP 라이브러리를 선택하십시오)을 사용하는 것이 좋습니다.
그래도 빠른 수정을 위해 따옴표로 묶인 CSV로 내보낸 다음 VBScript를 사용하여 가져올 수 있습니다.이와 같은 것입니다. 먼저 VBA에서 작동하도록 시도해 보겠습니다.
이 작업에는 Office 사본이 필요하며 잘 확장되지 않습니다(그러나 Excel 창을 숨길 수 있음).
방금 xlsLib를 찾았으니, 정말로 C로 직접 써야 한다면 해보세요!그러나 특히 기존 파일에 쓰는 경우에는 올바르게 쓰기가 매우 어렵기 때문에 주의해야 합니다.
LibExcel도 존재하지만, 그것은 C++이기 때문에 당신은 포장지를 컴파일하거나 C를 위해 다시 써야 합니다.
마지막으로 주의할 점은, 제가 처음에 이것들을 검색하지 않은 이유는 바로 잡기가 매우 어렵다는 것입니다.위의 도서관을 이용해 본 적은 없지만, 이상하고 특이한 방법으로 고장이 날 것 같습니다.사무실 형식에 대한 조엘의 견해를 읽으셨을 겁니다.
엑셀은 다른 오피스 제품과 마찬가지로 COM을 통해 내장을 수출합니다.Windows에서 실행 중이고 Excel이 설치되어 있다면 C++, VB, C# 및 COM Interop이 있는 다른 모든 언어에서 사용할 수 있습니다.(일반 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;
}
무료 라이브러리이지만 C: Excel 형식이 아닌 C++입니다.
저는 임시변통이 게시한 내용에 대한 작은 확장자를 가지고 있습니다.ID 디스패치 인터페이스로 쉽게 칠할 수 있는 매우 편리한 라이브러리가 있습니다.http://disphelper.sourceforge.net/
프로젝트에 추가하는 파일은 하나지만 C로 ID 디스패치 프로그래밍을 거의 재미있게 만듭니다;-)
다른 옵션은 Excel XLSX 파일을 작성하기 위한 C 라이브러리인 libxlsxwriter를 사용하는 것입니다.하지만 엑셀 파일을 읽을 수 없고 XLS 파일을 지원하지 않습니다.
언급URL : https://stackoverflow.com/questions/493111/what-is-a-simple-and-reliable-c-library-for-working-with-excel-files
'programing' 카테고리의 다른 글
[NSBundlebundleForClass:[self class]]에 해당하는 신속한 기능 (0) | 2023.04.26 |
---|---|
다트에서 두 개의 목록을 결합하려면 어떻게 해야 합니까? (0) | 2023.04.26 |
Objective-C에서 객체가 어떤 클래스에 있는지 테스트하려면 어떻게 해야 합니까? (0) | 2023.04.26 |
변수에 표준 오차를 저장하는 방법 (0) | 2023.04.26 |
문자열 형식을 사용하여 WPF XAML 바인딩에 문자열 추가 (0) | 2023.04.26 |