2010-04-29 2 views
4

저는 ACE OLEDB 드라이버를 사용하여 Excel 2007 스프레드 시트를 읽고 있는데, 그 중 '.' 열 이름의 문자는 '#'문자로 변환됩니다. 내가 가지고있는 경우 예를 들어, 스프레드 시트에서 다음OLEDB가 "."을 열 이름의 "#"로 변환하는 것을 피하는 방법은 무엇입니까?

Name  Amt. Due  Due Date 
Andrew  12.50   4/1/2010 
Brian  20.00   4/12/2010 
Charlie  1000.00   6/30/2010 

다음 코드를 읽을 때 두 번째 컬럼의 이름은 "AMT 사의 # 때문에"로보고 될 것이다 : 나는 '

OleDbConnection connection = new OleDbConnection(
    "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=MyFile.xlsx; " + 
    "Extended Properties=\"Excel 12.0 Xml;HDR=YES;FMT=Delimited;IMEX=1\""); 
OldDbCommand command = new OleDbCommand("SELECT * FROM MyTable", connection); 
OleDbReader dataReader = command.ExecuteReader(); 
System.Console.WriteLine(dataReader.GetName(1)); 

내가 찾을 수있는 모든 문서를 읽었고 나는 이것이 일어날 것이라고 언급하는 것을 발견하지 못했습니다. 누구도 전에 이것에 빠졌습니까? 이 문제를 해결할 수있는 방법이 있습니까?

+0

이 http://stackoverflow.com/questions/1088394/why-is-the-column-name-from의 또 다른 변형으로 나타납니다 -a-csv-file-different-dat-datatable –

답변

1

이 부분을 참조하십시오. OleDBAdapter Excel QA 스택 오버 플로우를 통해 게시했습니다.

데이터를 Excel에서 .xlsx 통합 문서를 만든 다음 OleDbConnection을 변경하여 데이터를 잘 읽었습니다.

string sql = "SELECT F1, F2, F3 FROM [sheet1$] WHERE F1 IS NOT NULL"; 

OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + PrmPathExcelFile + @";Extended Properties=""Excel 12.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text"""); 

콘솔에 데이터를 쓰기 :

Name Amt. Due Due Date 
Andrew 12.50 4/1/2010 
Brian 20.00 4/12/2010 
4

.이 열 이름에서 유효하지 않으므로 기간이 #으로 변경됩니다. 열 이름을 경우에만 내부적으로 사용중인 경우이 전혀 문제가되지 않지만 질문을하기 때문에 열 이름이 # 어딘가에 보고서 또는 눈금에서 나타나고 있다고 가정합니다.

어떤 열이 .을 포함하는지 미리 알지 못하면 어디에서든지 열 이름이 표시되고 label1.Text = colname.Replace("#", ".")을 수행하고 다른 열 이름 중 어느 것도 #을 포함하지 않기를 바랍니다. .을 대체 할 OleDb를 얻는 방법으로는 Replace을 다른 열 이름을 쓸데없는 두려움없이 덜 희미하고 드문 문자 (예 : | 또는 ~)로 바꿀 수있는 방법이있을 수 있습니다.

관련 문제