小编pww*_*lff的帖子

C#Excel Interop循环遍历单元格时速度慢

我试图从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)

c# excel performance office-interop

8
推荐指数
2
解决办法
5290
查看次数

更新 Pandas 中的等效项

我的数据框中有一个不应为空的列列表。

我想删除任何这些列中的空行。我的解决方案是迭代所需的列,并将“排除”列设置为在排除它们之前将向用户显示的错误消息(我将在流程结束时以报告的形式向用户呈现这些消息) )

我目前正在尝试这样的事情:

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)

python sql dataframe pandas

5
推荐指数
1
解决办法
1932
查看次数

标签 统计

c# ×1

dataframe ×1

excel ×1

office-interop ×1

pandas ×1

performance ×1

python ×1

sql ×1