public string CreateTableauDataExtract(DataTable dataTable, string file) { Extract output = new Extract(file); // initialize the extract object, which we will output using (output) // create a new Tableau table based on the DataTable using (Tableau.TableDefinition tableDefinition = new Tableau.TableDefinition()) { // ForEach Column foreach (DataColumn dc in dataTable.Columns) { string columnName = dc.ColumnName; System.Type columnType = dc.DataType; string columnTypeString = columnType.ToString(); switch (columnTypeString) { case "System.String": tableDefinition.AddColumn(columnName, Tableau.Type.Type_UnicodeString); break; case "System.DateTime": tableDefinition.AddColumn(columnName, Tableau.Type.Type_DateTime); break; case "System.Int32": tableDefinition.AddColumn(columnName, Tableau.Type.Type_Integer); break; case "System.Double": tableDefinition.AddColumn(columnName, Tableau.Type.Type_Double); break; case "System.Decimal": tableDefinition.AddColumn(columnName, Tableau.Type.Type_Double); break; case "System.Boolean": tableDefinition.AddColumn(columnName, Tableau.Type.Type_Boolean); break; } } Tableau.Table table = output.AddTable("Extract", tableDefinition); // loop through each row foreach (DataRow dr in dataTable.Rows) { Row row = new Row(tableDefinition); // loop through each column while in the row foreach (DataColumn dc in dataTable.Columns) { object value = dr[dc.ColumnName]; string columnName = dc.ColumnName; System.Type columnType = dc.DataType; string columnTypeString = columnType.ToString(); if (!string.IsNullOrWhiteSpace(value.ToString())) { switch (columnTypeString) { case "System.String": row.SetString(dc.Ordinal, value.ToString()); break; case "System.DateTime": DateTime dateValue = DateTime.Parse(value.ToString()); row.SetDateTime(dc.Ordinal, dateValue.Year, dateValue.Month, dateValue.Day, dateValue.Hour, dateValue.Minute, dateValue.Second, dateValue.Millisecond); break; case "System.Int32": row.SetInteger(dc.Ordinal, Convert.ToInt32(value.ToString())); break; case "System.Double": row.SetDouble(dc.Ordinal, Convert.ToDouble(value.ToString())); break; case "System.Decimal": row.SetDouble(dc.Ordinal, Convert.ToDouble(value.ToString())); break; case "System.Boolean": row.SetBoolean(dc.Ordinal, Convert.ToBoolean(value.ToString())); break; } } } table.Insert(row); } } return(file); }