如何用C#创建CSV Excel文件? [关闭]

2023-11-24

我正在寻找用于创建 CSV Excel 文件的课程。

预期功能:

  • 使用极其简单
  • 转义逗号和引号,以便 excel 可以很好地处理它们
  • 以时区证明格式导出日期和日期时间

你知道有什么类可以做到这一点吗?


我根据自己的需要使用反射编写了略有不同的版本。我必须将对象列表导出到 csv。以防有人想在将来使用它。

public class CsvExport<T> where T: class
    {
        public List<T> Objects;

        public CsvExport(List<T> objects)
        {
            Objects = objects;
        }

        public string Export()
        {
            return Export(true);
        }

        public string Export(bool includeHeaderLine)
        {

            StringBuilder sb = new StringBuilder();
            //Get properties using reflection.
            IList<PropertyInfo> propertyInfos = typeof(T).GetProperties();

            if (includeHeaderLine)
            {
                //add header line.
                foreach (PropertyInfo propertyInfo in propertyInfos)
                {
                    sb.Append(propertyInfo.Name).Append(",");
                }
                sb.Remove(sb.Length - 1, 1).AppendLine();
            }

            //add value for each property.
            foreach (T obj in Objects)
            {               
                foreach (PropertyInfo propertyInfo in propertyInfos)
                {
                    sb.Append(MakeValueCsvFriendly(propertyInfo.GetValue(obj, null))).Append(",");
                }
                sb.Remove(sb.Length - 1, 1).AppendLine();
            }

            return sb.ToString();
        }

        //export to a file.
        public void ExportToFile(string path)
        {
            File.WriteAllText(path, Export());
        }

        //export as binary data.
        public byte[] ExportToBytes()
        {
            return Encoding.UTF8.GetBytes(Export());
        }

        //get the csv value for field.
        private string MakeValueCsvFriendly(object value)
        {
            if (value == null) return "";
            if (value is Nullable && ((INullable)value).IsNull) return "";

            if (value is DateTime)
            {
                if (((DateTime)value).TimeOfDay.TotalSeconds == 0)
                    return ((DateTime)value).ToString("yyyy-MM-dd");
                return ((DateTime)value).ToString("yyyy-MM-dd HH:mm:ss");
            }
            string output = value.ToString();

            if (output.Contains(",") || output.Contains("\""))
                output = '"' + output.Replace("\"", "\"\"") + '"';

            return output;

        }
    }

使用示例:(根据评论更新)

CsvExport<BusinessObject> csv= new CsvExport<BusinessObject>(GetBusinessObjectList());
Response.Write(csv.Export());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何用C#创建CSV Excel文件? [关闭] 的相关文章

随机推荐

  • 将 Azure 服务总线与 Android 连接

    我编写了一个简单的 java 程序 jdk 1 7 它列出了所有服务总线主题并将每个主题的名称打印到标准输出 try String namespace myservicebus from azure portal String issuer
  • 用于 cookie 的编码方案

    RFC 6265 第 6 1 节指定每个 cookie 至少允许 4096 字节 现在为了知道有多少人物允许每个 cookie 我需要知道用于 cookie 的字符编码 因为 RFC 指定了每个 cookie 的最大大小bytes并不是人物
  • 在视图中访问会话变量

    由于我无法访问视图中的会话变量 我想知道是否需要向视图添加更多内容才能使其正常工作 在我看来 Session ComputerNumber ToString 控制器 Session ComputerNumber game RandomNum
  • 使用 PDO 获取单行、单列

    我有一个 mysql 查询 其目标是单行中的单列 SELECT some col name FROM table name WHERE user user 当我执行该语句后 stmt gt execute 如何将这个单个单元格直接放入没有循
  • C语言中如何确定文件的大小?

    如何计算文件的大小 以字节为单位 include
  • 类型错误:无法读取未定义的属性“getState”

    我想尝试小型 redux 示例 因此我安装了 redux 但出现此错误 类型错误 无法读取未定义的属性 getState 新的提供者 webpack internal node modules react redux es componen
  • 如何在 Silverlight 应用程序中调试 IIS 托管的 Web 服务

    有人知道如何在 Silverlight 4 0 应用程序中调试由 IIS 托管的 Web 服务吗 我的IIS版本是7 5 操作系统是windows 7 您能具体说明如何操作的步骤吗 太感谢了 运行解决方案时 在调试模式下 或具有最新的符号文
  • 如何将UIView转换为没有背景的UIImage?

    我有包含图钉图像和标签的 UIView 因为我们知道 UIView 是矩形 所以如果我将 UIView 转换为 UIImage UIImage 也是矩形 我想让 UIImage 像图钉图像一样 因为如果用户单击背景 UIImage 的事件将
  • C# 圣诞树

    我是 C 新手 因此我请求帮助我实现此目的 我刚刚有这个代码 class Program static void Main string args AnotherTriangle ob new AnotherTriangle ob Crea
  • 寻找图像中的空白区域

    这个问题在某种程度上与语言无关 但我选择的工具恰好是 numpy 数组 我正在做的是通过 PIL 获取两个图像的差异 img ImageChops difference img1 img2 我想找到包含从一张图片到另一张图片的变化的矩形区域
  • 对于由苹果的 Health App - HealthKit - iOS 创建的健康数据,HKMetadataKeyTimeZone 始终为零

    我正在使用 HealthKit 读取用户的健康数据 尝试从健康数据中获取时区信息 以确定健康活动发生在哪个确切时区 为此 我依赖 HealthKit 元数据中的 HKMetadataKeyTimeZone 键 但即使对于苹果健康应用程序自动
  • 如何通过 at() 函数访问二维向量的索引?

    我将在成员函数中初始化一个 2D 向量 其中输入参数计划被输入到函数参数内的确定索引中 此外 出于安全考虑 我不会使用 运算符来进行成员访问 如何使用 at 函数来访问 2D 向量的索引 如下所示 vector
  • 如何正确显示孟加拉语文本

    我有一个JTextArea我需要在其中显示孟加拉语文本 例如 但我只能看到长方形的盒子 如何正确显示孟加拉语字符 首先采用孟加拉 unicode 支持的字体 例如 Font banglaFont new Font Arial Unicode
  • os.sched_getaffinity(0) 与 os.cpu_count()

    所以 我知道标题中两种方法的区别 但不知道实际含义 据我了解 如果您使用的 NUM WORKERS 数量多于实际可用的核心数量 您将面临性能大幅下降 因为您的操作系统不断地来回切换 试图保持并行 不知道这有多真实 但我在某处从比我聪明的人那
  • PowerShell ScriptBlock 到底是什么

    PowerShell ScriptBlock 不是词汇闭合因为它不会关闭其声明环境中引用的变量 相反 它似乎利用了动态作用域和自由变量 这些变量在运行时绑定在 lambda 表达式中 function Get Block b PowerSh
  • MarshmallowrelativeLayout 与alignBaseline 的行为很奇怪

    在 Android 6 0 Marshmallow 上 EditText 相对于具有基线和layout alignBaseline 属性的RelativeLayout 中的ImageView 的定位不再起作用 甚至可以在 Android s
  • 使用“as”进行 TypeScript 转换[重复]

    这个问题在这里已经有答案了 我试图塑造一个类型any为布尔值 所以我简单地这样做了 let a
  • Google 日历 API、RRULE 和 EXDATE

    我正在尝试使用 API 将一些事件导出到 Google Calendar 特别是包装它的 python 库 这些事件会重复发生 这是使用 RRULE 字符串定义到 Google 日历的 并且我尝试使用 EXDATE 字符串排除某些日期 这是
  • POST 内容长度超出限制

    当用户上传文件时 我在 php 的 error log 中收到类似的错误 PHP 警告 POST 内容长度 11933650 字节超出了第 0 行未知中 8388608 字节的限制 在我的 php ini 在 public html 中创建
  • 如何用C#创建CSV Excel文件? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我正在寻找用于创建 CSV Excel 文件的课程 预期功能 使用极其简单 转义逗号和引号 以便 excel 可以很好地处理它们 以时区证明格式导出日期和日期时间 你知道有什么类可以做