我正在创建一个小型应用程序,它读取制表符分隔的文本文件,进行一些更改,然后创建一个 Excel 2007 .xlsx 文件。我无法弄清楚如何从字符串数组中获取行并将它们写入 Excel 文件,使用制表符将行分成列。我希望这是有道理的。
我有string Lines[]
包含这样的东西:
Item1\tItem2\tItem3\tItem4
ItemA\tItemB\tItemC\tItemD
Item5\tItem6\tItem7\tItem8
我想创建一个如下所示的 Excel 文件:
A B C D
Item1 Item2 Item3 Item4
ItemA ItemB ItemC ItemD
Item5 Item6 Item7 Item8
我尝试了以下方法,但它只是将第一行Lines[]
放入每一行,而不是分成列:
string Lines[] = GetLines();
Excel.Application xlApp;
Excel.Workbook xlWb;
Excel.Worksheet xlWs;
object misValue = System.Reflection.Missing.Value;
xlApp = new Excel.Application();
xlWb = xlApp.Workbooks.Add(misValue);
xlWs = (Excel.Worksheet)xlWb.Worksheets.get_Item(1);
Excel.Range c1 = (Excel.Range)xlWs.Cells[2, 1];
Excel.Range c2 = (Excel.Range)xlWs.Cells[2 + lines.Length, 1];
Excel.Range range = xlWs.get_Range(c1, c2);
range.Value = lines;
range.TextToColumns(
range,
Microsoft.Office.Interop.Excel.XlTextParsingType.xlDelimited,
Microsoft.Office.Interop.Excel.XlTextQualifier.xlTextQualifierNone,
false,
true // This is flag to say it is tab delimited
);
xlApp.Visible = true;
任何意见,将不胜感激!谢谢!
这是我目前得到的输出:
A B C D
Item1\tItem2\tItem3\tItem4
Item1\tItem2\tItem3\tItem4
Item1\tItem2\tItem3\tItem4
编辑:我已经用@jiverson 的建议更新了我的代码,并且该行现在在 Excel 中分为列,但第一行Lines[]
仍然出现在 Excel 的每一行中。为什么?
编辑#2:这是更新的工作代码:
Excel.Application xlApp;
Excel.Workbook xlWb;
Excel.Worksheet xlWs;
object misValue = System.Reflection.Missing.Value;
xlApp = new Excel.Application();
xlWb = xlApp.Workbooks.Add(misValue);
xlWs = (Excel.Worksheet)xlWb.Worksheets.get_Item(1);
int currentRow = 2;
string[] lines = GetLines();
for (int i = 0; i < lines.Length; i++)
{
string line = lines[i]; //get the current line
string[] values = line.Split('\t'); //split the line at the tabs
//
// .. i do some things to specific values here ..
//
lines[i] = String.Join("\t", values); //put the updated line back together
Excel.Range currentRange = (Excel.Range)xlWs.Cells[currentRow, 1]; //get the next row
currentRange.Value = lines[i]; //write the line to Excel
currentRow++;
}
Excel.Range c1 = (Excel.Range)xlWs.Cells[2, 1]; //get the first cell
Excel.Range c2 = (Excel.Range)xlWs.Cells[2 + lines.Length, 1]; //get the last cell
Excel.Range range = xlWs.get_Range(c1, c2); //set the range as the used area
range.TextToColumns( //split the row into columns
range,
Excel.XlTextParsingType.xlDelimited,
Excel.XlTextQualifier.xlTextQualifierNone,
false,
true // This is flag to say it is tab delimited
);