/// <summary> /// Export all the database data associated with the selected view to the .csv file indicated in the file path so that spreadsheet applications (like Excel) can display it. /// </summary> public static void ExportToCsv(FileDatabase database, string filePath, bool excludeDateTimeAndUTCOffset) { using (TextWriter fileWriter = new StreamWriter(filePath, false)) { // Write the header as defined by the data labels in the template file // If the data label is an empty string, we use the label instead. // The append sequence results in a trailing comma which is retained when writing the line. StringBuilder header = new StringBuilder(); List <string> dataLabels = database.GetDataLabelsExceptIDInSpreadsheetOrder(); foreach (string dataLabel in dataLabels) { // Skip the DateTime and Utc offset column headers if (excludeDateTimeAndUTCOffset == true && (dataLabel == Constant.DatabaseColumn.DateTime || dataLabel == Constant.DatabaseColumn.UtcOffset)) { continue; } header.Append(AddColumnValue(dataLabel)); } fileWriter.WriteLine(header.ToString()); // For each row in the data table, write out the columns in the same order as the // data labels in the template file int countAllCurrentlySelectedFiles = database.CountAllCurrentlySelectedFiles; for (int row = 0; row < countAllCurrentlySelectedFiles; row++) { StringBuilder csvRow = new StringBuilder(); ImageRow image = database.FileTable[row]; foreach (string dataLabel in dataLabels) { // Skip the DateTime and Utc offset data if (excludeDateTimeAndUTCOffset == true && (dataLabel == Constant.DatabaseColumn.DateTime || dataLabel == Constant.DatabaseColumn.UtcOffset)) { continue; } csvRow.Append(AddColumnValue(image.GetValueDatabaseString(dataLabel))); } fileWriter.WriteLine(csvRow.ToString()); } } }
/// <summary> /// Export all the database data associated with the selected view to the .csv file indicated in the file path so that spreadsheet applications (like Excel) can display it. /// </summary> public static async Task <bool> ExportToCsv(FileDatabase database, string filePath, CSVDateTimeOptionsEnum csvDateTimeOptions, bool csvInsertSpaceBeforeDates) { // Set up a progress handler that will update the progress bar Progress <ProgressBarArguments> progressHandler = new Progress <ProgressBarArguments>(value => { // Update the progress bar CsvReaderWriter.UpdateProgressBar(GlobalReferences.BusyCancelIndicator, value.PercentDone, value.Message, value.IsCancelEnabled, value.IsIndeterminate); }); IProgress <ProgressBarArguments> progress = progressHandler; return(await Task.Run(() => { //The separator, while normally a comma, can be different in some countries // We special case the separator as a ';' for countries that us a comma for a decimal point, e.g., Germany String separator = String.Equals(",", System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator) ? ";" : ","; try { progress.Report(new ProgressBarArguments(0, "Writing the CSV file. Please wait", false, true)); using (StreamWriter fileWriter = new StreamWriter(filePath, false)) { // Write the header as defined by the data labels in the template file // If the data label is an empty string, we use the label instead. // The append sequence results in a trailing comma which is retained when writing the line. StringBuilder header = new StringBuilder(); List <string> dataLabels = database.GetDataLabelsExceptIDInSpreadsheetOrder(); foreach (string dataLabel in dataLabels) { if (dataLabel == Constant.DatabaseColumn.UtcOffset) { // Always skip UTC Offset, as the user has the option of including that in the DateTime column instead continue; } // Skip the DateTime and Utc offset column headers //if (excludeDateTimeAndUTCOffset == true && (dataLabel == Constant.DatabaseColumn.DateTime || dataLabel == Constant.DatabaseColumn.UtcOffset)) if ((dataLabel == Constant.DatabaseColumn.Date || dataLabel == Constant.DatabaseColumn.Time) && csvDateTimeOptions != CSVDateTimeOptionsEnum.DateAndTimeColumns) { // Skip the Date column and Time column if the CSVDateTimeOptions are set to a parameter other than the two Date / Time columns continue; } if (dataLabel == Constant.DatabaseColumn.DateTime && csvDateTimeOptions == CSVDateTimeOptionsEnum.DateAndTimeColumns) { // Skip the DateTime column if the CSVDateTimeOptions is set to show the two Date / Time columns instead continue; } header.Append(AddColumnValue(dataLabel, separator)); } fileWriter.WriteLine(header.ToString()); // For each row in the data table, write out the columns in the same order as the // data labels in the template file int countAllCurrentlySelectedFiles = database.CountAllCurrentlySelectedFiles; for (int row = 0; row < countAllCurrentlySelectedFiles; row++) { StringBuilder csvRow = new StringBuilder(); ImageRow image = database.FileTable[row]; foreach (string dataLabel in dataLabels) { if (dataLabel == Constant.DatabaseColumn.UtcOffset) { // Always skip UTC Offset, as the user has the option of including that in the DateTime column instead continue; } if ((dataLabel == Constant.DatabaseColumn.Date || dataLabel == Constant.DatabaseColumn.Time) && csvDateTimeOptions != CSVDateTimeOptionsEnum.DateAndTimeColumns) { // Skip the Date column and Time column if the CSVDateTimeOptions are set to a parameter other than the two Date / Time columns continue; } if (dataLabel == Constant.DatabaseColumn.DateTime) { if (csvDateTimeOptions == CSVDateTimeOptionsEnum.DateAndTimeColumns) { // Skip the DateTime column if the CSVDateTimeOptions is set to show the two Date / Time columns instead continue; } else { string prefix = csvInsertSpaceBeforeDates ? " " : String.Empty; if (csvDateTimeOptions == CSVDateTimeOptionsEnum.DateTimeColumnWithTSeparator) { csvRow.Append(prefix + AddColumnValue(image.GetValueCSVDateTimeWithTSeparatorString(), separator)); } else if (csvDateTimeOptions == CSVDateTimeOptionsEnum.DateTimeWithoutTSeparatorColumn) { csvRow.Append(prefix + AddColumnValue(image.GetValueCSVDateTimeWithoutTSeparatorString(), separator)); } else { //Defunct, no longer used, should not get here System.Diagnostics.Debug.Print("In CSVWriter: Should not be trying to write a UTC Offset formatted date!"); //if (csvDateTimeOptions == CSVDateTimeOptionsEnum.DateTimeUTCWithOffset) //{ // csvRow.Append(prefix + AddColumnValue(image.GetValueCSVDateTimeUTCWithOffsetString())); //} } } } else if (dataLabel == Constant.DatabaseColumn.Date || dataLabel == Constant.DatabaseColumn.Time) { string prefix = csvInsertSpaceBeforeDates ? " " : String.Empty; csvRow.Append(prefix + AddColumnValue(image.GetValueDatabaseString(dataLabel), separator)); } else { csvRow.Append(AddColumnValue(image.GetValueDatabaseString(dataLabel), separator)); } } fileWriter.WriteLine(csvRow.ToString()); if (row % 5000 == 0) { progress.Report(new ProgressBarArguments(Convert.ToInt32(((double)row) / countAllCurrentlySelectedFiles * 100.0), String.Format("Writing {0}/{1} file entries to CSV file. Please wait...", row, countAllCurrentlySelectedFiles), false, false)); } } } return true; } catch { return false; } }).ConfigureAwait(true)); }