2012-09-28 3 views
0

gov't HHS 부서의 Excel 2003 스프레드 시트를 읽어야합니다. XLS에는 셀, 암호로 보호 된 매크로 및 양식 컨트롤 (예 : 버튼, 드롭 다운)이 병합되었습니다.병합 된 셀, 양식 컨트롤, 암호로 보호 된 시트를 사용하여 Excel 읽기

다음은 요구 사항 :

나는 실용적으로 엑셀이 설치되어 있지 않은 서버에이 글을 읽을 필요가있다.

병합 된 셀에 문제가있어 OLE 4 드라이버를 사용할 수 없으므로 데이터가 삭제됩니다. 아니면 폼 컨트롤과 같은 다른 것이 그것을 던지고 있습니다.

Excel을 사용하면 암호로 보호 된 스프레드 시트를 XML로 저장하지 않아도 암호를 잊어 버릴 수 있습니다.

Excel 2007 및 2010을 XLSX로 저장하고 ACE OLE Excel 드라이버를 사용하려고했습니다. 병합 된 셀은 문제가되지 않지만 폼 컨트롤은 (아마 JET 드라이버를 사용하는 경우 일 수도 있습니다.)

네이티브 BIFF 형식을 읽는 CodeProject의 샘플 프로젝트를 시도했지만 2003 년에는 정상적으로 작동했지만 2007 년과 2010 년에 숨이 막히고 곧 업그레이드 될 예정이므로 곧 폐기 될 계획입니다. .

이 스프레드 시트를 읽을 수있는 네이티브 XLS 형식을 읽을 수있는 신뢰할 수있는 회사 책임 친화적 인 오픈 소스 라이브러리가있을 수 있습니까? 아니면 제 3 번째 구매가 필요한 관리자를 설득해야할지 결정해야합니까? 서버에 Excel을 설치하려면 pita 기업 예외가 발생합니다. 전자는 다른 옵션이없는 경우 선호되는 방법입니다.

내 최고의 옵션이나 신뢰할 수있는 제 3 자 라이브러리는 무엇이겠습니까?

들으

+1

비밀번호를 삭제하면 XML로 저장하면 충분하므로 다음을 참고하십시오. [link] (http://mcgimpsey.com/excel/removepwords.html) –

+0

좋은 제안. 나는 그것을 들여다 볼 것이다. – ChadD

+0

덧붙여서, 나는 암호를 제거 할 수 있었지만 이것이 나를위한 해결책이 될 것이라고는 생각하지 않습니다. 법적인 문제 외에도 EXCEL API를 사용하여 암호를 제거해야하므로 피하려고합니다. – ChadD

답변

0

나는이 정확하게 당신이 필요하지만, 당신이 NPOI (하지 Gembox)를 사용하는 경우 읽기 및 보호 된 통합 문서를 수정하고 저장할 수 있습니다 모르겠어요. 예를 들어 A1 셀의 값을 읽고 D4의 값을 수정하고 결과를 저장하기 위해 이렇게 간단한 것을 시도 할 수 있습니다. 통합 문서가 보호되어 있어도이 작업은 가능합니다 (Excel을 사용하여 x.xls를 수정할 수 없음).

 string fullPath = @"c:\tmp\x.xls"; 
     FileStream aFile = new FileStream(fullPath, FileMode.Open, FileAccess.Read); 
     HSSFWorkbook wb = new HSSFWorkbook(aFile); 
     aFile.Close(); 
     ISheet curSheet = wb.GetSheet("Foglio1"); 
     IRow aRow = curSheet.GetRow(0); 
     if (aRow == null) 
      aRow = curSheet.CreateRow(0); 
     ICell aCell = aRow.GetCell(0); 
     if (aCell == null) 
      aCell = aRow.CreateCell(0); 
     MessageBox.Show(aCell.StringCellValue); 
     aRow = curSheet.GetRow(3); 
     if (aRow == null) 
      aRow = curSheet.CreateRow(3); 
     aCell = aRow.GetCell(3); 
     if (aCell == null) 
      aCell = aRow.CreateCell(3); 
     aCell.SetCellValue("testValue"); 
     fullPath = @"c:\tmp\x2.xls"; 
     File.Delete(fullPath); 
     aFile = new FileStream(fullPath, FileMode.Create); 
     wb.Write(aFile); 
     aFile.Close(); 

불행하게도 NPOI (제가 알고 적어도 방법)을 사용하여 시트 보호를 해제 할 수있는 방법이 없지만, 당신도 원래 암호를 몰라도 당신이 무엇을 원하는 할 수있는 암호를 설정할 수 있습니다.

curSheet.ProtectSheet(string.Empty); 
관련 문제