我试图从C#中的Excel文档中提取所有文本数据,并且遇到了性能问题.在下面的代码中,我打开工作簿,遍历所有工作表,并循环使用范围内的所有单元格,随时从每个单元格中提取文本.问题是,这需要14秒才能执行.
public class ExcelFile
{
public string Path = @"C:\test.xlsx";
private Excel.Application xl = new Excel.Application();
private Excel.Workbook WB;
public string FullText;
private Excel.Range rng;
private Dictionary<string, string> Variables;
public ExcelFile()
{
WB = xl.Workbooks.Open(Path);
xl.Visible = true;
foreach (Excel.Worksheet CurrentWS in WB.Worksheets)
{
rng = CurrentWS.UsedRange;
for (int i = 1; i < rng.Count; i++)
{ FullText += rng.Cells[i].Value; }
}
WB.Close(false);
xl.Quit();
}
}
Run Code Online (Sandbox Code Playgroud)
而在VBA中我会做这样的事情,需要大约1秒钟:
Sub run()
Dim strText As String
For Each ws In ActiveWorkbook.Sheets
For Each …
Run Code Online (Sandbox Code Playgroud) 我的数据框中有一个不应为空的列列表。
我想删除任何这些列中的空行。我的解决方案是迭代所需的列,并将“排除”列设置为在排除它们之前将向用户显示的错误消息(我将在流程结束时以报告的形式向用户呈现这些消息) )
我目前正在尝试这样的事情:
for col in requiredColumns:
df[pd.isnull(df[col])]['excluded'] = df[pd.isnull(df[col])]['excluded'].apply(lambda x: str(x) + col + ' empty, excluded')
Run Code Online (Sandbox Code Playgroud)
但运气不好——这些列没有更新。过滤器本身(仅获取空行)有效,更新部分似乎不起作用。
我习惯了 SQL:
UPDATE df SET e = e & "empty, excluded" WHERE NZ(col, '') = ''
Run Code Online (Sandbox Code Playgroud)