无效的数据types使用Gembox.Spreadsheet提取到数据表

以为我会开始一个新的线程,因为旧的已经死了2年。

我一直在尝试将Excel数据导入应用程序大约一周,这是最接近的我来:我使用Gembox,因为Access不是一个可行的选项,但我似乎无法得到血腥的ExtractToDataTable方法正常工作。 exception消息如下所示:“在SourceRowIndex:1和SourceColumnIndex:4上解压缩到DataTable时的无效数据值”我已经尝试了两种可用的解决scheme,但是他们没有帮助。

任何帮助将非常感激。 达尼

这是我的代码:

private void button1_Click(object sender, EventArgs e) { string path = openFileDialog1.FileName; dataGridView1.DataSource = PopulateDataTable(PopulateExcelWorkSheet(path)).DefaultView; } public ExcelWorksheet PopulateExcelWorkSheet(string path) { path = String.Empty; // DataTable daTable = new DataTable(); ExcelFile exFile = new ExcelFile(); exFile.LoadXlsx(@"filepath", XlsxOptions.None); ExcelWorksheet ws = exFile.Worksheets["Sheet1"]; return ws; } public DataTable PopulateDataTable(ExcelWorksheet ws) { DataTable daTable = CreateDataTable(ws.Rows.Count, ws.Columns.Count); int rowsInWs = ws.Rows.Count; int colsInWS = ws.Columns.Count; try { ws.ExtractToDataTable(daTable, rowsInWs, ExtractDataOptions.StopAtFirstEmptyRow, ws.Rows[1], ws.Columns[1]); } catch {MessageBox.Show("FUCKIN HELL"); } string mew = daTable.Rows[0][0].ToString(); int rowCount = daTable.Rows.Count; int columnCount = daTable.Columns.Count; string uhm = String.Format("Rows in dataTable : {0} , Columns in dataTable {1} , Rows in WS: {2} , Columns in WS {3}", rowCount.ToString(), columnCount.ToString(), rowsInWs.ToString(), colsInWS.ToString()); MessageBox.Show(uhm); string mes = ws.Rows[0].Cells[3].Value.ToString(); MessageBox.Show(mes); return daTable; } public DataTable CreateDataTable(int rows, int columns) { DataTable skeleton = new DataTable(); for (int i = 0; i <= rows; i++) { skeleton.Rows.Add(); } for (int x = 0; x <= columns; x++) { skeleton.Columns.Add(); } return skeleton; } } 

}

这里是我使用的代码一直工作正常:

 private DataTable ReadExcelFile(string flatFilePath, bool firstRowHasHeaders) { SpreadsheetInfo.SetLicense("MY KEY"); ExcelFile excelFile = new ExcelFile(); excelFile.LoadXls(flatFilePath); int unnamed = 0; int cols; string[] columns; int curRow = 0; int curCol = 0; DataTable dataTable = new DataTable(); ExcelWorksheet worksheet = excelFile.Worksheets[0]; for (cols = 0; cols < worksheet.Rows[0].AllocatedCells.Count; cols++) { if (firstRowHasHeaders) { if (worksheet.Rows[0].Cells[cols].Value != null) dataTable.Columns.Add(worksheet.Rows[0].Cells[cols].Value.ToString()); else { dataTable.Columns.Add("Unnamed Column " + (++unnamed)); } curRow = 1; } else { dataTable.Columns.Add("Column " + (cols + 1)); } } for (; curRow < worksheet.Rows.Count; curRow++) { columns = new string[cols]; for (curCol = 0; curCol < cols; curCol++) { if (worksheet.Rows[curRow].Cells[curCol].Value == null) columns[curCol] = ""; else columns[curCol] = worksheet.Rows[curRow].Cells[curCol].Value.ToString(); } dataTable.Rows.Add(columns); } return dataTable; } 

当然,所有东西都以stringforms添加到数据表中,这对我们来说是完全可以接受的。

您也可以尝试DataGridViewConverter ,一个用于导出/导入DataGridView到GemBox.Spreadsheet 3.7中的Excel文件的API。

您可以在以下链接中findDataGridViewConverter使用的示例: http : //www.gemboxsoftware.com/SampleExplorer/Spreadsheet/Windows.Forms/Windows.Forms/cs http://www.gemboxsoftware.com/support/articles/datagridview -to-Excel的进出口