2017-04-11 5 views
0

Iはパイソン、エクセル、VBA、パンダの組み合わせを使用して、Pythonプログラムを作成するために探して、そしてxlwingsなどのExcel-Pythonモジュールだと意志:IDをカテゴリに分類するためのデータを処理するプログラムを作成するにはどうすればよいですか?

-Read各行が表すのExcelテーブルユーザーIDと時刻を表す各ユーザーIDの次の列

- 行内の時刻に基づいてユーザーIDをグループに分類します。各グループには最大量のユーザーが存在し、グループがいっぱいになると、そのユーザーの次の行が考慮されます。 (ユーザー1の場合は、B1〜9AM、C1-10:30 AM、D1-11AMに以下の時間が表示されます.9AMグループがいっぱいでない場合、ユーザー1を9AMグループに分類してください。ユーザのリスト各列グループであるとし、その下バックExcelシートに10:30基など)

データ-Spit IDとグループ

数百、数千のため-Iterateこの式各グループに割り当てられている番号

この問題にアプローチするにはどうすればよいでしょうか?

+1

なぜpythonとmysqlタグですか? – Charlie

+0

私はPythonでプログラムを書いているので、エクセルをcsvでw/pythonとSQLを使うことになるかもしれません。 – dner

答えて

0

VBAではなくより強力な汎用プログラミング言語をお探しの場合は、Microsoft Office .NET interopライブラリを使用することをお勧めします。私はそれがMicrosoft Officeのオプションインストールだと信じています。次に、任意の.NET言語(Python http://ironpython.netを含む)を使用してファイルを調べ、必要なデータを取り出してから、再度ダンプします。

最適なパフォーマンスを達成するのは容易ではないので注意が必要です。

また、Excelインスタンスでinteropライブラリがどのように機能するかについても注意する必要があります。実際には、開いているインスタンスでうまく動作しないExcelのバックグラウンドインスタンスが開きます。私はプログラムの完了時にExcelのインスタンスを殺すために多くのコードを書く必要がありました。それ以外の場合はクラッシュしてしまいます。

ここにC#のサンプルコードがあります。 Pythonに置き換えることができます。 C#とPythonのプロジェクトをVisual Studioの同じソリューションにまとめて参照することができます。

[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; 
} 
+0

あなたの応答に感謝します!しかし、プログラミングに関する知識が限られているため、Python、VBA、Pandas、XlwingsなどのPython-excelパッケージを組み合わせて使用​​することを望んでいました。 – dner

+0

何を使用するかは既に分かっているようですが、要件を含めるように質問を更新し、まだ試したことがないもの – Charlie

関連する問題