Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何创建一个程序来处理excel数据以将ID分类?_Python_Excel_Vba_Sorting - Fatal编程技术网

Python 如何创建一个程序来处理excel数据以将ID分类?

Python 如何创建一个程序来处理excel数据以将ID分类?,python,excel,vba,sorting,Python,Excel,Vba,Sorting,我希望使用python、Excel、VBA、Pandas和Excel python模块(如xlwings)的组合创建一个python程序,该模块将: -阅读excel表格,每一行代表一个用户id,每一个用户id的以下列代表一个时间 -根据用户ID所在行的时间将其分为多个组。每个组将有最大数量的用户,如果组已满,则将考虑给定用户行中的下一次。(即,对于用户1,列出了以下时间:B1-9AM、C1-10:30AM、D1-11AM。尝试将用户1排序到9AM组,除非9AM组已满,在这种情况下,尝试排序到1

我希望使用python、Excel、VBA、Pandas和Excel python模块(如xlwings)的组合创建一个python程序,该模块将:

-阅读excel表格,每一行代表一个用户id,每一个用户id的以下列代表一个时间

-根据用户ID所在行的时间将其分为多个组。每个组将有最大数量的用户,如果组已满,则将考虑给定用户行中的下一次。(即,对于用户1,列出了以下时间:B1-9AM、C1-10:30AM、D1-11AM。尝试将用户1排序到9AM组,除非9AM组已满,在这种情况下,尝试排序到10:30AM组,等等)

-对数千个ID和数百个组重复此公式

-将数据吐回excel工作表,每列为一个组,下面是分配给每个组的用户列表


解决此问题的最佳方法是什么?

如果您正在寻找一种更强大的通用编程语言来代替VBA,我建议您使用Microsoft Office.NET interop库。我相信这是一个可选的安装与Microsoft Office。然后,您可以使用任何.NET语言(包括Python)查看该文件,提取所需的数据,然后将其转储回

您需要小心,因为实现最佳性能并不容易

您还需要注意互操作库如何处理Excel实例。它实际上打开了Excel的一个后台实例,而这个实例可能无法很好地处理打开的实例。我不得不编写大量代码,在程序完成时杀死Excel实例,否则就会崩溃并挂起

下面是一些C#中的示例代码。您可以根据需要使用Python进行替换。您可以在VisualStudio的同一个解决方案中同时使用C#和Python项目,并来回引用

[DllImport("user32.dll", SetLastError = true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);

Microsoft.Office.Interop.Excel.Application excel = null;
int excelHWnd = 0;

public static void KillProcessWithThisWindow(int hWnd)
{
    uint processID = 0;
    IntPtr window = new IntPtr(hWnd);
    uint threadId = GetWindowThreadProcessId(window, out  processID);
    Process p = Process.GetProcessById((int)processID);
    p.Kill();
}

private void OpenExcel()
{
    if (excel!=null)
        try { KillProcessWithThisWindow(excelHWnd); }
        catch (Exception ex) { Console.Error.WriteLine(ex.Message + ex.StackTrace); }
    excel = new Microsoft.Office.Interop.Excel.Application();
    excel.ScreenUpdating = false;
    excel.DisplayStatusBar = false;
    excel.EnableEvents = false;
    excelHWnd = excel.Hwnd;
}

private void Cleanup()
{
    try { excel.Quit(); }
    catch (Exception ex) { Console.Error.WriteLine(ex.Message + ex.StackTrace); }
    try { KillProcessWithThisWindow(excelHWnd); }
    catch (Exception ex) { Console.Error.WriteLine(ex.Message + ex.StackTrace); }
    excel = null;
}

为什么使用python和mysql标记?因为我正在用python编写一个程序,可能需要将excel转换为csv才能使用w/python和sqlI。我感谢您的回复!然而,由于我有限的编程知识,我希望使用Python、VBA、Pandas和Xlwings的组合,或者另一个Python excel软件包,听起来你已经知道该使用什么了;更新问题以包括您的需求和您尝试过但尚未奏效的内容可能会有所帮助