如何从Excel读取并替换.txt文件中的某些值

时间:2018-11-23 09:10:23

标签: c# excel

我是C#新手。我只有一些基本知识,例如复制和粘贴。这意味着我不擅长C#。对不起,我的英语。现在到我的问题。我有一个notepad.txt文件。它包含一些参数,这些参数的值是从其他程序中获得的。

此.txt文件的说明: [可选单位] name_of_parameter =值

notepad.txt:

[mm]p0=45
[mm]param1=36.42199010819
[mm]param2=56
param9=56
[degrees]p3=453
[degrees]p4=134
[mm]p5=56
p6=1
p7=1

没有机会获得此输出的另一种样式(.txt文件)。

除此之外,我还有一个Excel表,其中包含随机的行和列。第一行是 name_of_parameter ,如-> param1,p0 .....

因此,我想用Excel工作表中的param2值替换例如param2的值(在我的.txt文件中)。我想使用循环中两个文件中都存在的所有name_of_parameters来执行此操作,因为我的excel工作表有多行。结论我想操纵notepad.txt文件。

screenshot

我的C#代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {

            string[] lines = System.IO.File.ReadAllLines(@"C:\Users\Z003DUKJ\Desktop\notepad.txt");
            int stop = 1;



        }
    }
}

如果有人对我有一些建议,谢谢。

3 个答案:

答案 0 :(得分:0)

查看链接。

How to read single Excel cell value

请注意,您的代码已指向正确的工作表。您将可以从代码访问每个单元格。您可以操纵值

答案 1 :(得分:0)

我能想到的最好的是:

  1. 阅读所有行,就像在代码中一样
  2. 将包含paramNum的行解析为objcets,并将其放入Dictionary<string, double>
  3. 遍历字典中的键 并在与您的关联的excel表中搜索*该单元格 密钥。
  4. 如果找到包含参数的单元格,请读取其值 关于它的位置,例如:如果参数在 xlWorkSheet.Cells[row,"A"],然后在您的excel文件中 xlWorkSheet.Cells[row-1, "A"]
  5. 然后用您的词典项目的值替换单元格值

如何读取xls文件:

var excelApp = new Excel.Application();
var xlWorkBook = excelApp.Workbooks.Open(fileName);
var ws = (_Worksheet)wb.Worksheets[1];

搜索单元格

Excel.Range currentFind = null; 
Excel.Range firstFind = null; 

Excel.Range rangeOfParams = Application.get_Range("A1", "E5");
// You should specify all these parameters every time you call this method,
// since they can be overridden in the user interface. 
currentFind = rangeOfParams .Find("param1", missing,
    Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, 
    Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false,
    missing, missing); 

while(currentFind != null) 
{ 
    // Keep track of the first range you find. 
    if (firstFind == null)
    {
        firstFind = currentFind; 
    }

    // If you didn't move to a new range, you are done.
    else if (currentFind.get_Address(Excel.XlReferenceStyle.xlA1)
          == firstFind.get_Address(Excel.XlReferenceStyle.xlA1))
    {
        break;
    }

    currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
    currentFind.Font.Bold = true; 

    currentFind = rangeOfParams.FindNext(currentFind); 
}

替换单元格的值:

ws.Cells[2, "A"] = SomeValue;
ws.Cells[2, "E"] = OtherValue;

MSDN Microsoft Excel Solutions

答案 2 :(得分:0)

继您拥有的excel版本之后,此nuget软件包即可为您完成工作

请参阅link

您有一些有趣的样本