2017-05-17 2 views
-1

ODBC (Provider=Microsoft.ACE.OLEDB.12.0)를 사용하여 C#에서 xls/xlsx 파일을 만듭니다. 결과 테이블에는 4 개의 행이 있습니다 (예 :). Excel로 파일을 열고 다섯 번째 행을 추가하고 파일을 저장합니다. ODBC를 통해 C#에서 으로 읽으려고하면 5가없는 원래의 4 행만 얻습니다. ODBC는 XLS 파일의 어딘가에 행 번호를 저장하고 나중에 Excel 또는 LibreOffice에서 입력 한 새 데이터없이 읽는 것 같습니다. 이 문제는 알려진 것입니까? 해결할 수 있습니까? Excel에서 새 스프레드 시트를 만들면 모든 행이 fron C#으로 읽혀집니다.ODBC 드라이버가 Excel에서 추가 한 행을 읽을 수 없습니다.

편집 : 유용한 정보를 발견했습니다. C#/ODBC에서 XLS 파일을 처음 만들 때 두 개의 테이블 (시트)이 있습니다. 테이블 이름이 TABLE 인 경우 DataTable sheets = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null)sheets.Rows[0] == "TABLE"이고 sheets.Rows[1] == "TABLE $"을 포함합니다. Excel은 "TABLE"시트 하나만 보여줍니다. 편집 후 (5 행) 변경 사항은 "TABLE $"시트에만 존재합니다.

+0

스프레드 시트 특정 행 값을 검사하여 불필요한 추가 문자가 생겨 저장을 거부 한 것 같습니다. –

+0

코드를 보지 않으면 도움이되지 않습니다. ODBC 연결에서 새로 고침을 수행합니까? https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.odbcconnection.refresh.aspx – PaulF

답변

-1

내가이 문제를 발견했다고 생각합니다. Excel에서 만든 내부 스프레드 시트 이름 끝에 "$"기호가있는 것으로 보입니다. ODBC에 의해 생성 된 시트 이름은 CREATE TABLE에 제공된 정확한 문자열입니다. 반면 Excel (및 LibreOffice)은 TABLETABLE$ 시트에 대해 하나의 시트 만 표시합니다. Excel에서 표를 편집하면 저장 후 변경 내용은 TABLE$에만 있습니다. 다른 시트 TABLE은 변경되지 않았습니다. 내가 SELECT * FROM [TABLE] 할 때 결과는 엑셀 변경하지 않고 원본 ODBC 생성 테이블에서입니다. 이제 XLS 파일에서 사용 가능한 시트를 열거하고 첫 번째 시트 이름이 "$"로 끝나지 않고 시트가 1보다 큰 경우 첫 번째 시트 이름에 "$"를 추가하고 올바른 테이블을 엽니 다. ODBC 연결 문자열에 "$"- 끝 표로 작업 할 수있는 옵션이 포함되어 있다고 가정합니다.

0

그렇다면 5 번째 행을 추가 하시겠습니까? 동일한 경우에 사용하고있는 코드 행을 공유해주십시오. 코드에 다음과 같은 문제가있을 수 있습니다.

  1. 저장 커밋이 제대로 수행되지 않았습니다.
  2. 파일 연결 읽기 전에 읽기가 완료되지 않았습니다.
+0

다섯 번째 행이 C#이 아닌 Excel에 추가되었습니다. . 그런 다음 ODBC를 사용하는 C#은 처음 네 행만 읽습니다. 나는 ODBC가 캐시 기능을 가지고 있지만 캐시가 HDD/임시 파일에 있는지 또는 어떻게 든 XLS 파일에 있는지 여부를 확신하지 못합니다. C#에서 저장된 모든 행은 C#에서 읽혀집니다. – i486

관련 문제