2010-12-29 51 views
18

Vấn đề tôi gặp phải là bộ điều hợp dữ liệu chỉ xem hàng đầu tiên trong mỗi cột để xác định loại dữ liệu. Trong trường hợp của tôi, cột đầu tiên "SKU" là số cho 500 hàng đầu tiên sau đó tôi tình cờ có SKU là số và chữ cái hỗn hợp. Vì vậy, những gì kết thúc xảy ra là các hàng trong cột SKU được để trống, nhưng tôi vẫn nhận được thông tin khác cho mỗi hàng cột.Trợ giúp với chuỗi kết nối OleDB cho các tệp excel

Tôi tin rằng đó là chuỗi kết nối kiểm soát điều đó và với cài đặt hiện tại của tôi nó sẽ hoạt động, tuy nhiên nó không phải là.

Connection String:

conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Nick\Desktop\Pricing2.xlsx" + @";Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0"""; 


ImportMixedTypes=Text;TypeGuessRows=0 

nên là từ khóa quan trọng, nhìn vào 0 hàng và chỉ sử dụng văn bản như các loại giá trị cho tất cả mọi thứ.

"Bandaid" tôi đã đặt vào điều này là để làm cho hàng đầu tiên trong bảng tính hỗn hợp các chữ cái và số và đặc biệt để lại hàng đó trong truy vấn của tôi.

+1

Bạn đã thử các nhà cung cấp khác nhau, như JET thay vì ACE? Hãy xem ở đây cho các định dạng chuỗi kết nối có thể khác: http://www.connectionstrings.com/excel – goric

+0

Tôi đã truy cập trang web đó và đã thử mọi thứ. Tôi ước có một cách tốt hơn để làm điều này. Nếu họ muốn thiết kế hệ thống để lấy một chuỗi dài họ cần phải phát hành một máy phát điện miễn phí. Ugh ... –

+1

@thay JET vẫn sẽ có cùng một vấn đề vì các giá trị cần sửa đổi đều nằm trong sổ đăng ký và không thể được đặt từ chuỗi kết nối. – arcain

Trả lời

28

Thật không may, bạn không thể đặt ImportMixedTypes hoặc TypeGuessRows từ chuỗi kết nối vì các cài đặt đó được xác định trong sổ đăng ký. Đối với trình điều khiển ACE OleDb, chúng được lưu trữ tại

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel 

trong sổ đăng ký. Vì vậy, bạn có thể đơn giản hóa chuỗi kết nối của bạn để:

conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Nick\Desktop\Pricing2.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1;"""; 

Khi bạn thiết lập TypeGuessRows để 0ImportMixedTypes để Text trong registry, bạn sẽ nhận được hành vi mà bạn đang mong đợi. Tuy nhiên, bạn có thể cân nhắc việc sử dụng một số lượng lớn phù hợp như 1000 thay vì 0 nếu bạn thấy hiệu suất nhập thấp hơn lý tưởng.

+0

Cảm ơn bạn rất nhiều. –

+9

Chỉ cần lưu ý đối với bất cứ ai nhìn vào điều này, nếu bạn sử dụng một máy 64 bit thì bạn cần thêm 'Wow6432Node' vào khóa đăng ký để nó trở thành:' HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Office \ 12.0 \ Kết nối truy cập Engine \ Động cơ \ Excel' – amarsuperstar

+0

Tôi chỉnh sửa Registry, dựa trên [link] này (http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/5b22e94c-37a9-4be5-ad55-3d9229220194/). Nó hoạt động trong cửa sổ xp nhưng không hoạt động trong cửa sổ 7. Tôi có cần đặt ** Wow6432Node ** trong khóa đăng ký cho 32 hoặc 64 bit không? – soclose