【问题标题】:Reading one & Update some other Excel with c#使用 c# 读取一个并更新其他一些 Excel
【发布时间】:2018-09-07 21:49:49
【问题描述】:

我正在开发一个小型 winform 实用程序来读取一个 excel 并更新另一个 excel。

我正在尝试使用 OLEDB 读取源 excel 文件(其中有几个隐藏的列和行)。我能够做到这一点并在 Datatable 中获得输出,但面临以下几个挑战:

  1. Sheet 具有包含数字、日期和字符串的列。通过 OLEDB 读取后,所有数字都会转换为日期,反之亦然。我不希望这种情况发生。我已经阅读了几种解决方案,例如在连接字符串中将 IMEX 设置为 1,但没有任何效果。我该如何解决?
  2. 我只想返回活动区域。目前,我看到很多空白列/行。我必须手动处理它。
  3. 我尝试根据列值之一过滤 excel 输出,但没有成功。
  4. 有没有办法丢弃隐藏的列?
  5. 加载数据表后,我看到列显示为 F1、F2.. 等等。是的,源 excel 的列从第 4 行开始。如何在数据表中保留这些名称?

一旦我阅读了源 excel,我必须运行一些逻辑并逐行甚至逐列更新其他 excel。我也必须保留格式。更新其他excel最好是什么?

【问题讨论】:

    标签: c# excel winforms format oledb


    【解决方案1】:
    1. 您要做的是使用 schema.ini 文件,这是一个示例:

    [ABC_20171128.csv]
    Format = Delimited(|)
    CharacterSet=ANSI
    ColNameHeader=True
    DateTimeFormat=dd MM yyyy hh:nn:ss
    
    Col1 = Date DateTime
    Col2 = AccountID Text
    Col3 = SubAccount Text
    Col4 = MarketCode Text
    Col5 = SecurityCode Text
    Col6 = Units Single
    

    将 schema.ini 文件与您正在阅读的文件放在同一目录中。

    更多信息:Missing column of Dates in CSV file using Schema.ini file


    1. 可以手动处理或者不使用 OleDB 使用 Interop。

    2. MCVE 提出一个新问题。

    3. 您需要互操作来确定隐藏了哪些列。或者你会知道哪些是隐藏的要丢弃。

    4. Schema.ini 应该可以处理列标题。

    【讨论】:

    • 谢谢。我将 .ini 文件放在 excel 文件的同一目录中,甚至尝试更改“ABC_20171128.csv”以匹配 excel 文件名,但我没有看到任何变化。我错过了什么吗?
    • 我明白了。文件名有空格。我删除了它们,它起作用了。但是,如果这个实用程序被多个 ppl 使用,我不能指望他们每次都更新 .ini 文件或将其保存在同一目录中并从文件中删除空格。有什么解决办法吗?
    • 有没有其他方法可以告诉用户将此 .ini 文件保存在与文件相同的目录中?
    猜你喜欢
    • 2016-10-07
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多