在我的基於Windows的應用程序(C#) 我想導入Excel工作表,以顯示其在DatatGridView 數據我不想使用OLEDB導入Excel表中的數據,以數據網格,而無需使用OLEDB
任何幫助
在我的基於Windows的應用程序(C#) 我想導入Excel工作表,以顯示其在DatatGridView 數據我不想使用OLEDB導入Excel表中的數據,以數據網格,而無需使用OLEDB
任何幫助
using Excel = Microsoft.Office.Interop.Excel;
顯然需要添加參考你的項目,然後它的樸素簡單:)
private void ProcessExcel(string filepath)
{
Excel.ApplicationClass ExcelObj = new Excel.ApplicationClass();
Excel.Workbook theWorkbook = ExcelObj.Workbooks.Open(filepath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
Excel.Sheets sheets = theWorkbook.Worksheets;
Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);
Excel.Range range = worksheet.UsedRange;
System.Array myvalues = (System.Array)range.Cells.Value2;
int vertical = myvalues.GetLength(0);
int horizontal = myvalues.GetLength(1);
string[] headers = new string[horizontal];
string[] data = new string[horizontal];
DataTable ResultsHeader = New DataTable();
DataSet ds = New DataSet();
for (int x = 1; x <= vertical; x++)
{
Utils.inicializarArrays(datos);
for (int y = 1; y <= horizontal; y++)
{
if (x == 1)
{
headers[y - 1] = myvalues.GetValue(x, y).ToString();
}
else
{
string auxdata = "";
if (myvalues.GetValue(x, y) != null)
auxdata = myvalues.GetValue(x, y).ToString();
data[y - 1] = auxdata;
}
}
if(x == 1) //headers
{
for(int w = 0; w < horizontal; w++)
{
ResultsHeader.Columns.Add(New DataColumn(headers[w], GetType(string)));
}
ds.Tables.Add(ResultsHeader);
}
else
{
DataRow dataRow = ds.Tables[0].NewRow();
for(int w = 0; w < horizontal; w++)
{
dataRow(headers[w]) = data[w]
}
ds.Tables[0].Rows.Add(dataRow);
}
}
DataView myDataView = new DataView();
myDataView.Table = ds.Tables[0];
MydataGrid.CurrentPageIndex = 0;
MydataGrid.DataSource = myDataView;
MydataGrid.DataBind();
}
深入瞭解followign問題的「微軟Word/Excel文檔操縱」部分:Most useful free .NET libraries?
嗨,我需要什麼,我問了一個示例代碼 – Dotnet 2010-09-15 08:07:23
我可以建議你這個解決辦法...
Excel文件保存爲csv格式。在http://www.codeproject.com/KB/database/CsvReader.aspx
使用CSV讀者庫它有很多的方法來作爲數據源的數據網格例如使用
我會使用CSV格式保存Excel工作表,然後使用這個免費的fast CSV Reader C#實現來解析它。
我遲到了,但我有一些值得添加的東西!我嘗試了Juan的代碼,並沒有立即編譯。在對互聯網進行了幾個小時的研究之後,我對它進行了一些修改,並且準確地完成了原始海報的要求(因爲我需要做同樣的事情)。我不得不從其他來源拼湊代碼,不幸的是,我沒有跟蹤我嘗試和改變的零星和片斷,所以我不能對此發表太多評論。
以下代碼在Visual Studio 2008和.NET 3.5中起作用。另外,將數據放入數組時,格式化會丟失(例如,日期變爲需要使用DateTime.FromOADate()
進行轉換的雙精度轉換)。與此相關的問題是,您無法確定某個值是編碼觀點中的實際雙精度值還是日期值,但如果您事先知道列將作爲日期,則在插入數據時將其格式化桌子。
private void processExcel(string filename)
{
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
var missing = System.Reflection.Missing.Value;
xlApp = new Excel.ApplicationClass();
xlWorkBook = xlApp.Workbooks.Open(filename, false, true, missing, missing, missing, true, Excel.XlPlatform.xlWindows, '\t', false, false, 0, false, true, 0);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
Excel.Range xlRange = xlWorkSheet.UsedRange;
Array myValues = (Array)xlRange.Cells.Value2;
int vertical = myValues.GetLength(0);
int horizontal = myValues.GetLength(1);
DataTable dt = new DataTable();
// must start with index = 1
// get header information
for (int i = 1; i <= horizontal; i++)
{
dt.Columns.Add(new DataColumn(myValues.GetValue(1,i).ToString()));
}
// Get the row information
for (int a = 2; a <= vertical; a++)
{
object[] poop = new object[horizontal];
for (int b = 1; b <= horizontal; b++)
{
poop[b - 1] = myValues.GetValue(a, b);
}
DataRow row = dt.NewRow();
row.ItemArray = poop;
dt.Rows.Add(row);
}
// assign table to default data grid view
dataGridView1.DataSource = dt;
xlWorkBook.Close(true, missing, missing);
xlApp.Quit();
releaseObject(xlWorkSheet);
releaseObject(xlWorkBook);
releaseObject(xlApp);
}
private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
MessageBox.Show("Unable to release the Object " + ex.ToString());
}
finally
{
GC.Collect();
}
}
我怎樣才能像參考我無法測量值你寫 – Dotnet 2010-09-15 08:53:55
特定的一個我有它在C:\ Program Files文件\微軟的Visual Studio 9.0 \視覺工作室工具Office \ PIA \ Office12 \ Microsoft.Office.Interop.Excel.dll – 2010-09-15 08:58:07
它工作良好,但我怎麼能分離每個單元格的值,並寫入網格意味着如果在我的Excel中我有列作爲名稱和年齡,我會喜歡顯示內容,因爲它是單獨放在datagridview我可以鱈魚爲此請 – Dotnet 2010-09-15 09:28:19