2010-11-19 7 views
4

Excel 통합 문서에 많은 양의 데이터 (약 1-2MB)를 저장할 수 있습니까?Excel 통합 문서에 사용자 지정 데이터 저장

이상적으로이 데이터는 통합 문서의 워크 시트와 연결해야합니다.
CustomProperties는 대용량 데이터를 지원하지 않을 것입니다.

내 데이터는 binary, xml, string 형식으로 표시 할 수 있습니다.

감사합니다 ...

+0

Excel의 셀은 텍스트, 수식 및 숫자를 지원합니다. 왜 Excel을 사용하여 바이너리 데이터를 저장하고 싶습니까? 그것은 Excel에서 그것을 사용하는 것은 매우 어려울거야 ... –

답변

0

예, 엑셀 세포에서 문자열과 XML을 저장할 수 있습니다. 바이너리의 경우 Excel에 저장하지 않는 것이 좋겠지 만 OLE (개체 연결 및 포함)를 수행해야한다면 옵션을 사용할 수 있습니다. 당신은 OLE 개체로 삽입 다음 Excel의 외부 파일과 바이너리를 저장하고함으로써 그렇게 할 수있다 :

Dim mySht As Worksheet 
Dim oleFileName as String 

oleFile = "MyXmlDoc.xml" 

Set mySht = ActiveWorkbook.ActiveSheet 

mySht.Shapes.AddOLEObject Filename:=Environ$("Appdata") & _ 
    "\MyFolder\" & oleFile, _ 
     Link:=False, DisplayAsIcon:=True 

그것은 일반적인 파일 형식의 특정 유형의 우리를 위해 좋은 일했다. 그러나 원시 이진 데이터에 대해서는 사용하지 않았습니다. 보통 우리는 Word 문서 나 PDF를 스프레드 시트에 넣습니다. 또한 통합 문서를 손상 시키거나 이진 데이터를 잃을 위험이 있습니다. 이 경우 OLE 객체는 Word 대신 Wordperfect를 가진 사용자가 클릭하거나 Linux/Mac을 실행하고 포함 된 문서가 열리지 않습니다.

추가하는 모든 포함 된 개체에 대해 Excel 파일이 다소 커지게 만듭니다. 그것의 버크를 가진 오래된 기술입니다.

0

데이터에 대한 통합 문서에 VBA 모듈을 추가하고 데이터를 일반 ASCII 문자열 (예 : Base64 인코딩 사용)로 인코딩 할 수 있습니다. 코드 발생으로 같을 것이다 : 당신이 선호하는 경우

Dim x(1000) As String 
Sub InitData() 
    x(0) = "abcdefghijk...." 
    x(1) = "123456789......" 
    '...' 


End Sub 

는 또한, 시트 대신 VBA 모듈 라인 별을 이러한 문자열을 저장할 수 있습니다.

인코딩/디코딩을 달성하기 위해, 이쪽을 봐 : 귀하의 정보를 파일로 제공하는 경우

How do I base64 encode a string efficiently using Excel VBA?

Base64 Encode String in VBScript

http://www.source-code.biz/snippets/vbasic/12.htm

+0

좋은 해결책. VBA 모듈에 데이터를 저장하는 것은 VBA 컴파일러에 의해 수 킬로 바이트의 데이터로 제한되는 반면, 시트에 저장하는 것은 문제없이 메가 바이트를 지원한다는 점을 언급 할 필요가 있습니다. 셀당 더 많은 데이터가 저장되면 스프레드 시트를 디스크에 저장하는 데 필요한 시간이 줄어 듭니다. 세포 당 4kb는 잘 작동합니다. Base64는 16 진수보다 작은 파일을 생성하지 않으며 구현하기가 쉽습니다. 나는 이것이 워크 시트의 압축 때문이라고 생각합니다. – Pierre

0

, 당신은 바이너리 모드로 파일을 읽고 넣을 수 있습니다 그것은 세포에서. 그런 다음 파일을 쉽게 재구성 할 수 있도록 파일 이름을 저장합니다. 다음은 몇 가지 코드입니다.

Sub readBin() 
    Dim iFreeFile As Integer, bTemporary As Byte 
    iFreeFile = FreeFile 
    Open "\temp.bin" For Binary Access Read As iFreeFile 
    Do While Not EOF(intFileNum) 
     Get iFreeFile, , bTemporary //read byte from file 
     Cells(1, 1) = bTemporary //save in cell 
    Loop 
    Close iFreeFile 
End Sub 
관련 문제