Я пытаюсь экспортировать результаты хранимой процедуры в таблицу Excel. Однако, хотя в базе данных есть некоторые значения 0 (для температуры и часов использования), которые являются релевантными значениями, в ней также есть NULL для полей, в которых данные не записаны. Когда это экспортируется в электронную таблицу Excel, все значения NULL (и допустимые 0) из базы данных становятся равными 0. Как гарантировать, что значение NULL в базе данных останется NULL в электронной таблице? Очевидно, что законные 0 (для температуры и т. д.) я бы хотел оставить и в таблице Excel такими же 0. На данный момент у меня есть следующий код C# (что мне добавить, чтобы гарантировать, что NULL является NULL в экспорте Excel) -
using System.Globalization;
using ClosedXML.Excel;
using CsvHelper;
using Microsoft.AspNetCore.Mvc;
using System.Reflection;
using Api.Utilities.Services.Abstractions;
namespace Api.Utilities.Services;
///
/// Provides functionality to export a collection of data into different formats.
///
public class DataExportService : IDataExportService
{
///
/// Exports a collection of data to an Excel file and returns the result as a file
stream.
///
/// The type of the data to be exported.
///
The list of data items to be exported.
/// The name of the file to be exported, optional parameter.
///
/// A containing the Excel file.
///
public FileStreamResult ExportToExcel(IEnumerable data, string? fileName)
{
using var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("Data");
var properties = typeof(T).GetProperties();
var currentRow = 1;
for (var i = 0; i < properties.Length; i++)
{
var customNameAttribute = properties[i].GetCustomAttribute();
var columnName = customNameAttribute != null ? customNameAttribute.Name : properties[i].Name;
worksheet.Cell(1, i + 1).Value = columnName;
}
currentRow++;
foreach (var item in data)
{
foreach (var nestedRow in GetNestedRows(item))
{
for (var j = 0; j < nestedRow.Count; j++)
{
var value = nestedRow[j];
worksheet.Cell(currentRow, j + 1).Value = value switch
{
null => string.Empty,
string str => str,
int intVal => intVal,
double dblVal => dblVal,
DateTime dtVal => dtVal,
bool boolVal => boolVal,
_ => value.ToString()
};
}
currentRow++;
}
}
worksheet.Columns().AdjustToContents();
MemoryStream stream = new();
workbook.SaveAs(stream);
stream.Position = 0;
return new FileStreamResult(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
{
FileDownloadName = string.IsNullOrEmpty(fileName) ? "export.xlsx" : fileName
};
}
/// The type of the data to be exported.
/// The list of data items to be exported.
///
/// A containing the CSV file.
///
public MemoryStream ExportToCsv(IEnumerable data)
{
using var writer = new StringWriter();
using var csv = new CsvWriter(writer, CultureInfo.InvariantCulture);
var properties = typeof(TData).GetProperties();
foreach (var prop in properties)
{
csv.WriteField(prop.Name);
}
csv.NextRecord();
foreach (var item in data)
{
foreach (var nestedRow in GetNestedRows(item))
{
foreach (var value in nestedRow)
{
csv.WriteField(value ?? string.Empty);
}
csv.NextRecord();
}
}
MemoryStream stream = new();
StreamWriter streamWriter = new(stream);
streamWriter.Write(writer.ToString());
streamWriter.Flush();
stream.Position = 0;
return stream;
}
private List GetNestedRows(T item)
{
var result = new List();
var properties = typeof(T).GetProperties();
var parentRow = new List();
var nestedCollections = new List();
foreach (var prop in properties)
{
var value = prop.GetValue(item);
if (value is IEnumerable collection && !(value is string))
{
nestedCollections.Add((prop, collection));
}
else
{
parentRow.Add(value);
}
}
if (nestedCollections.Count == 0)
{
result.Add(parentRow);
}
else
{
foreach (var (property, collection) in nestedCollections)
{
foreach (var nestedItem in collection)
{
var newRow = new List(parentRow);
newRow.AddRange(property.PropertyType.GetProperties().Select(nestedProp => nestedProp.GetValue(nestedItem)));
result.Add(newRow);
}
}
}
return result;
}
Я пытаюсь экспортировать результаты хранимой процедуры в таблицу Excel. Однако, хотя в базе данных есть некоторые значения 0 (для температуры и часов использования), которые являются релевантными значениями, в ней также есть NULL для полей, в которых данные не записаны. Когда это экспортируется в электронную таблицу Excel, все значения NULL (и допустимые 0) из базы данных становятся равными 0. Как гарантировать, что значение NULL в базе данных останется NULL в электронной таблице? Очевидно, что законные 0 (для температуры и т. д.) я бы хотел оставить и в таблице Excel такими же 0. На данный момент у меня есть следующий код C# (что мне добавить, чтобы гарантировать, что NULL является NULL в экспорте Excel) - [code] using System.Globalization; using ClosedXML.Excel; using CsvHelper; using Microsoft.AspNetCore.Mvc; using System.Reflection; using Api.Utilities.Services.Abstractions;
namespace Api.Utilities.Services;
/// /// Provides functionality to export a collection of data into different formats. /// public class DataExportService : IDataExportService {
/// /// Exports a collection of data to an Excel file and returns the result as a file stream. /// /// The type of the data to be exported. /// The list of data items to be exported. /// The name of the file to be exported, optional parameter.
/// /// A containing the Excel file. ///
public FileStreamResult ExportToExcel(IEnumerable data, string? fileName) { using var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("Data"); var properties = typeof(T).GetProperties(); var currentRow = 1;
for (var i = 0; i < properties.Length; i++) { var customNameAttribute = properties[i].GetCustomAttribute(); var columnName = customNameAttribute != null ? customNameAttribute.Name : properties[i].Name;
worksheet.Cell(1, i + 1).Value = columnName; } currentRow++;
foreach (var item in data) { foreach (var nestedRow in GetNestedRows(item)) { for (var j = 0; j < nestedRow.Count; j++) { var value = nestedRow[j];
/// The type of the data to be exported. /// The list of data items to be exported. /// /// A containing the CSV file. ///
public MemoryStream ExportToCsv(IEnumerable data) { using var writer = new StringWriter(); using var csv = new CsvWriter(writer, CultureInfo.InvariantCulture);
var properties = typeof(TData).GetProperties();
foreach (var prop in properties) { csv.WriteField(prop.Name); } csv.NextRecord();
foreach (var item in data) { foreach (var nestedRow in GetNestedRows(item)) { foreach (var value in nestedRow) { csv.WriteField(value ?? string.Empty); } csv.NextRecord(); } }
Я пытаюсь экспортировать результаты хранимой процедуры в электронную таблицу Excel. Однако, хотя в базе данных есть некоторые значения 0 (для температуры и часов использования), которые являются релевантными значениями, в ней также есть NULL для...
Я использую Magick.NET для чтения и записи файлов exr и передачи данных во внешний кодировщик. Я заметил, что файлы exr, которые записывает Imagemagick, содержат правильные значения.
Когда я пытаюсь прочитать пиксели самостоятельно, они...
Я хотел бы отредактировать таблицу Excel, встроенную в документ Word, с помощью Python (3.10.13).
Мне удалось редактировать все таблицы/тексты документа Word, используя docx import Document, но мне не удалось получить доступ к встроенной таблице...
В настоящее время я разрабатываю приложение для Android «Личные финансы». Я хочу предоставить пользователю подробный отчет о его/ее расходах в электронной таблице Excel, хотя я интегрировал базу данных Firebase со своим приложением для Android,...