2009-11-13 4 views

답변

4

Excel은 C++ 응용 프로그램에서 사용할 수있는 COM 인터페이스를 제공합니다.

Excel 2003 만 사용한 경험이 있지만 Excel 2007에서는 효과가 있다고 생각합니다.

여기 (COM 디스패치를 ​​사용하여) http://support.microsoft.com/kb/216686

0

여기서부터 OpenXml Sdk으로 시작하십시오. here에서 SDK를 다운로드하십시오. SDK는 .NET을 사용하므로 C++ .NET을 사용해야 할 수도 있습니다.

+0

내 응용 프로그램이 지금은 – yesraaj

+1

-1로 작동하지 않는 .Net을 사용하지 않기 때문에이 목적으로 .NET을 사용하는 것에 회의적입니다. 질문에 VC6 태그가 지정되었습니다. – MSalters

2

몇 가지 프로젝트에서 사용한 저 기술 방식은 외부 프로그램을 실행하는 간단한 스크립트/매크로/것을 만드는 것입니다. 외부 프로그램을 C++로 작성하십시오. 외부 프로그램에서 .csv 파일 (간단한 쉼표로 구분 된 값 텍스트 파일)에서 입력을 읽고 그 출력을 쓰십시오. Excel에서 .csv 파일을 쉽게 읽고 쓸 수 있으므로이 설치 프로그램은 실행 가능한 솔루션을 만드는 데 필요한 모든 것을 제공합니다.

0

오랜 시간이 걸렸지 만 Excel OLEDB에서 Jet OLEDB를 사용했습니다. 그 방향으로 검색을 시작할 수 있습니다.

3

는 파이썬 솔루션이있다 : # import를 사용하거나이 문서에서 설명하는 방법으로 http://snippets.dzone.com/posts/show/2036

그렇지 C++, 그러나 COM 인터페이스에 상관없이 동일하지해야하는 당신이 쓰는 언어 맞죠?

모든 것을 이식 할 필요는 없습니다. 단지 __init__, set_range, get_value, set_value, save (또는 save_as), closequit입니다. 쓰레기를 처리해야 할 수도 있습니다 (파이썬에는 자동 gc가 있음).

또는 당신은 할 수 단지 포트 (수정) 다음 코드 (I 테스트하지 않은, 난 더 이상 엑셀을 가지고 있지 않는 한 - 당신은 아마 파이썬과 파이썬 윈 다운로드하여 확인해야합니다) :

from win32com.client import Dispatch 
app = Dispatch("Excel.Application") 
app.Visible = True # spooky - watch the app run on your desktop! 
app.Workbooks.Open("C:\\book.xls") 

range = app.ActiveWorkbook.Sheets(1).Range("a1") 
print 'The range was:' 
print range.Value 

range.Value = 42 

print 'The value is now 42' 

app.ActiveWorkbook.Save() 
app.ActiveWorkbook.SaveAs("C:\\excel2.xls") 

app.ActiveWorkbook.Close() 
app.Quit() 

# any gc to do? 
1

이 작업은 모두 IDispatch 인터페이스를 통해 수행 할 수 있습니다. 정말 빠르게 피 묻은 복잡한 (건배 마이크로 소프트) 얻을 수 있지만 머리가 Excel에서 머리를 Excel을 가지고있어 적어도 한번도 다른 MS 응용 프로그램과 쉽게 통합 찾을 수 있습니다 :)

다행히도 누군가가 codeguru 이상 프로세스를 쉽고 편리하게 만들었습니다. 일단 내가이 코드를 읽고 나면 나는 탁월한 것을 두들겨 맞기 시작했고, 또한 내가 원했던 다른 일을하기 위해 그것을 확장하기가 정말로 쉬워졌다. IDispatch 인터페이스를 통해 Excel에 명령을 보내는 것을 기억하십시오. 즉, 프로그래밍 방식으로 작업하는 방법을 파악하기 위해 어떻게해야하는지 생각해야합니다.

편집 : 코드 전문가 예제 엑셀 2003이지만 2007 : 내가 과거에 이것에 대한 제 3 자 구성 요소를 사용했다

0

에 확장 할 매우 용이해야한다 : (SM Software에서 OLE XlsFile하지 무료,하지만 저렴). Microsoft COM 구성 요소에 비해이 구성 요소의 장점은 Excel이 설치되지 않은 경우에도 XLS 파일을 쓸 수 있다는 것입니다.

또한 수식 및 서식이 포함 된 스프레드 시트 또는 통합 문서를 만들 수 있습니다. CSV 파일을 교환 형식으로 사용하는 경우에는 불가능합니다.

0

최상의 성능이 필요한 경우 바이너리 Excel 파일을 작성하는 것이 최선의 방법이며이를 읽는 것만 큼 어렵지 않습니다.

http://sc.openoffice.org/excelfileformat.pdf

마이크로 소프트는 또한 문서를 출시했습니다 : 바이너리 파일 형식은 상대적으로 잘 OpenOffice.org 프로젝트에 의해 설명되어 당신이있는 경우

http://download.microsoft.com/download/0/B/E/0BE8BDD7-E5E8-422A-ABFD-4342ED7AD886/Excel97-2007BinaryFileFormat(xls)Specification.xps

이 솔루션은 가장 적합한을 대부분 데이터 및 서식이 거의없는 많은 Excel 파일을 작성하고 동시에 파일을 열지 않으려는 경우 나중에 하나의 Excel 파일을 작성하여 열면 다른 포스터에서 설명한대로 propsed C++ COM Interface를 사용할 수 있습니다.

Excel COM Addin을 작성하지 않으면 COM 인터페이스를 사용하면 값 비싼 프로세스 외부 호출이 필요합니다. 현재 Excel 시트에 데이터를 가져 오는 Addin을 작성하는 경우 시트를 채우는 것이 파일을 덤프하는 것보다 훨씬 느리지 만 한 번에 하나의 파일에 대해 사용자 시나리오에 따라 허용 될 수 있습니다. COM 인터페이스를 사용하기로 결정한 경우 Excel 호출 수를 최소화하십시오. 값의 배열을 삽입 할 수있는 메소드를 사용하고, 셀 단위가 아닌 행과 열로 스타일 특성을 설정할 수 있습니다.

3

Excel 2007 파일은 단순히 zip 파일입니다. .xlsx의 이름을 .zip으로 변경하여 파일과 폴더를 추출 할 수 있습니다. 텍스트 편집기로 모든 XML 파일임을 확인할 수 있습니다.

그래서 해결책 :

  1. 당신에게 데이터를 잡기 위해 XML 파서를 사용하여 XLSX에게
  2. 압축을 풉니 다 일반적인 클래스를 사용
  3. 당신은 수정 한 경우 somethig에 모든
재 압축

COM 개체가 필요하지 않습니다. C++ 컴파일러에 따라 필요한 소스를 쉽게 찾을 수 있습니다.

0

Excel을 사용하지 않고 ODBC를 사용하여 Excel 파일에서 데이터를 쉽게 읽고 쓸 수 있습니다. 링크 : Here

ODBC를 사용하여 데이터를 작성하는 방법에 대한 링크 : 나는 XLS 파일에 쓰기 전에 CodeProject의에서 사용할 C++ 클래스의 집합을 사용했습니다 Here

0

합니다.

정말 사용하기 쉽고 무료입니다! 당신은 그것을 here 찾을 수 있습니다.

셋업 할 시간이 없었습니다.

3

세 가지 주요 작업을 수행해야합니다.

1) 사전 필수 파일이 설치되고 위치 할 수 있는지 확인하십시오.

내가 알기는하지만 필요한 Microsoft 라이브러리 (및 해당 위치)를 찾을 수 있도록 적절한 버전의 Excel이 설치되어 있는지 확인하십시오. 즉 MSO.DLL, VBE6EXT.OLB 및 EXCEL.EXE

2) Microsoft 라이브러리를 설정하십시오.

C + + 코드에서는 간단한 콘솔 응용 프로그램으로 시작한다고 가정하고 Excel과 상호 작용하는 C++ 응용 프로그램에 가져 오기 라이브러리를 포함시켜야합니다. 내 예제에서 나는 사용

Excel::_ApplicationPtr pXL; 
pXL->Workbooks->Open(L"C:\\dump\\book.xls"); 
:

#import "C:\\Program Files (x86)\\Common Files\\microsoft shared\\OFFICE11\\MSO.DLL" \ 
rename("RGB", "MSORGB") 

using namespace Office; 

#import "C:\\Program Files (x86)\\Common Files\\microsoft shared\\VBA\\VBA6\\VBE6EXT.OLB" 

using namespace VBIDE; 

#import "C:\\Program Files (x86)\\Microsoft Office\\OFFICE11\\EXCEL.EXE" \ 
    rename("DialogBox", "ExcelDialogBox") \ 
    rename("RGB", "ExcelRGB") \ 
    rename("CopyFile", "ExcelCopyFile") \ 
    rename("ReplaceText", "ExcelReplaceText") \ 
    exclude("IFont", "IPicture") no_dual_interfaces 

3) C++ 예를 들어, Excel 통합 문서를 읽기/쓰기위한 엑셀 응용 프로그램 개체 포인터를 선언하는

코드에서 Excel 개체 모델을 사용하여

그리고 그 안에 엑셀 워크 시트와 세포를 액세스하고 조작하기 :

Excel::_WorksheetPtr pWksheet = pXL->ActiveSheet; 
Excel::RangePtr pRange = pWksheet->Cells; 
double value = pRange->Item[1][1]; 
pRange->Item[1][1] = 5.4321; 

등등. 다음은 blog posting에 대한 자세한 내용입니다.