2012-06-26 63 views
0

我想僅將數據類型(日期,編號等)作爲文本值從Web應用程序中的Excel文件中讀取。將excel列作爲文本讀取

請參閱使用的連接字符串。只有ACE驅動程序已安裝,我們不能在生產服務器中使用任何其他驅動程序。

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myOldExcelFile.xls; 
          Extended Properties="Excel 12.0;HDR=YES;IMEX=1"; 

設置IMEX=1不起作用。它爲某些值返回null。

我可以看到很多文章,但我看不到正確的答案。

任何幫助,將不勝感激。

+0

所以你的連接工作多久?你遇到的問題是閱讀數據?如果是這樣,你可以發佈一些代碼,但你要從Excel文件中提取數據的代碼 –

+0

@astroboy:是的連接字符串工作並且數據被加載到數據表中。但對於某些價值而言爲空。有一列有數字值。如果我在該列中的任何單元格中放置文本值,則將其視爲空值。 –

回答

3

我想這是你所追求的ACE work around

不幸的是,你不能設置在連接字符串ImportMixedTypes或TypeGuessRows因爲這些設置都在註冊表中定義。對於ACE OLEDB驅動程序,它們存儲在

HKEY_LOCAL_MACHINE \ SOFTWARE \微軟\辦公室\ 14.0 \ Access連接 發動機\發動機\ Excel中

在註冊表中。所以,你可以簡化你的連接字符串來擺脫一些擴展屬性。

TypeGuessRows設置爲0並將ImportMixedTypes設置爲註冊表中的文本後,您應該看到您期望的行爲。可以使用Microsoft.Office.Interop.Excel來讀取文件。示例代碼:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

using Excel = Microsoft.Office.Interop.Excel; 

namespace ExcelTut 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      Excel.Application xlApp = new Excel.Application(); 
      Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"D:/C.xlsx"); 
      Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1]; 
      Excel.Range xlRange = xlWorksheet.UsedRange; 

      int rowCount = xlRange.Rows.Count; 
      int colCount = xlRange.Columns.Count; 

      for (int i = 1; i <= rowCount; i++) 
      { 
       for (int j = 1; j <= colCount; j++) 
       { 
        MessageBox.Show(xlRange.Cells[i, j].Value2.ToString()); 
       } 
      } 

     } 

    } 
} 

代碼read excel file via interop

+0

有沒有其他的解決方法?我們不能更改註冊表值,因爲生產服務器中有多個應用程序託管。 –