如何编写列表<;列表<;字符串>>;转换为Excel(.xls或.xlsx)文件
本文关键字:gt 列表 lt xls xlsx 文件 转换 何编写 字符串 Excel | 更新日期: 2023-09-27 18:20:56
我想用C#将一些数据写入Excel文件(.xls或.xlsx)。
这是我目前的代码:
int length = readData.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Length;
List<List<string>> dataList = new List<List<string>>();
foreach (string line in readData.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries))
{
List<string> partsLine = new List<string>();
partsLine.AddRange(line.Split(''t'));
dataList.Add(partsLine);
}
所以,我把所有的数据分成几行。
然后我用"''t"分隔符分割每一行,并将行的每一部分添加到列表中。
最后,我有一个列表,其中包含所有拆分行的列表。
所以列表看起来像:
- List1{txt1,txt2}=第一行
- List2{txt3,txt 4,txt 5,txt 6}=第二行
- List3{txt7,txt 8,txt 9,txt 10}=第三行
- List4{txt 11、txt 12}等
所有列表的长度都不尽相同。
我想做的是将所有列表写入CSV文件。
每个列表将填充一行和一定数量的列,这取决于列表的长度(即txt1应为(row1,col1),txt2应为(row1,col2),txt3应为(row2,col1),txt4应为(row 2,col2)…)。
我已经设法导出.csv文件中的数据,但当我尝试使用.xls(或.xlsx)时,数据格式不正确。
这是.csv编写的代码:
const string separator = ";";
// Writing the list to the .csv file
try
{
using (StreamWriter writer = new StreamWriter(path + "''data.csv", false))
{
dataList.ForEach(line =>
{
var lineArray = line.Select(c => c.Contains(separator) ? c.Replace(separator.ToString(), "''" + separator) : c).ToArray();
writer.WriteLine(string.Join(separator, lineArray));
});
}
}
catch (Exception ex)
{
textBoxData.AppendText("Error while writing data to .csv file (" + ex.Message + ")");
}
感谢
您可以使用OLEDB连接连接到excel文件,并像使用SQL连接一样对其进行写入。如果你没有理由需要CSV,就这样做吧。
我设法在xls文件中写入了我的List<list<string>>
,这是我的代码:
private void CreateXLS(string data)
{
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "''data.xls";
xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
// List of lists containing each line split by part
List<List<string>> dataList = new List<List<string>>();
List<string> valuesA = new List<string>();
// Building the list
foreach (string line in data.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries))
{
List<string> partsLine = new List<string>();
partsLine.AddRange(line.Split(''t'));
dataList.Add(partsLine);
}
int row = 1;
int col = 1;
foreach (List<string> list in dataList)
{
foreach (string str in list)
{
xlWorkSheet.Cells[row, col] = str;
if (list.IndexOf(str) == list.Count - 1)
col = 1;
else
col++;
}
row++;
}
xlWorkBook.SaveAs(path, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
releaseObject(xlWorkSheet);
releaseObject(xlWorkBook);
releaseObject(xlApp);
textBoxData.AppendText("'nData saved to .xls file (path : " + path + ")");
}