2012-03-14 150 views
1

我試圖從SQL Server 2008的數據庫中讀取一些數據到Excel 2007電子表格使用C#,使用此連接字符串:VARCHAR的大小限制

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=foo.xlsx;Extended Properties='Excel 12.0 XML;HDR=YES' 

其中一列的數據庫是一個VARCHAR(1000)。當我嘗試在電子表格中重新創建模式時,似乎Excel的VARCHAR最多隻支持255. This page表明「單元格可以包含的字符總數」約爲32K,因此原則上應該可以獲得一個更長的字符串英寸

是否有一個簡單的方法來解決255字符限制?

+0

我沒有引用此,所以我不會提供它作爲答案,但我相信你不能。這個255個字符的限制也適用於SSIS。我懷疑這是Excel ODBC驅動程序固有的。我希望我錯了,有時候這對我很有價值。 – 2012-03-14 23:01:10

回答

1

儘管XLOPER12現在將支持長達32,767個Unicode字符的字符串,Excel 2010中的xlfEvaluate(和其他)excel C-Api函數仍然被限制爲255個字符長度。如果它傳遞了XLOPER12,它將返回xltypeErr字符串長度超過255.

用戶在Excel中看到的所有字符串都有許多版本,現在已作爲Unicode字符串內部存儲。 Unicode工作表字符串最長可達32,767(215 - 1)個字符,並且可以包含任何有效的Unicode字符。

當首次引入C API時,工作表字符串的字符串長度限制爲255個字符,並且C API反映了這些限制。使用Excel 2007,C API被更新以處理Excel長Unicode字符串。這意味着以正確方式註冊的DLL函數可以接受Unicode參數並返回Unicode字符串。

注意: C API中仍然完全支持字節字符串以實現向後兼容,但它們仍具有255個字符的限制。除了截斷字符串或​​將字符串分割爲多個單元格之外,沒有簡單的解決方法。

+1

雖然我很欣賞你在這方面的努力,但你的回答是迂迴的,其結論有點不明確。你是否基本上說沒有辦法解決255個字符的限制?爲了將來的參考,我建議在第一句中明確地說明這一點,然後才提供進一步的細節來支持你的情況。 – jjlin 2012-04-11 04:34:17