excel — PHP подсчитывает данные ячейки на основе имени

Некоторое время я делал ручной отчет по некоторым данным из формы, и он становился слишком избыточным из-за количества данных, которые я получаю сейчас, сначала было 50 записей, а теперь их более 500, поэтому мне нужно найти более простой способ управлять этим. Я думал, что программа PHP может сделать это проще.

В основном у меня есть данные, как показано ниже, мне нужно отсортировать по пользователю и посчитать, сколько ведет каждый пользователь.

Колонны

Имя пользователя Ведущий источник

Пит М, Ведущий 1

Фиона Л, Ведущий 2

Исходя из того, что этот CSV-файл довольно большой, мне было интересно, есть ли у кого-нибудь более простой способ решить эту проблему, чем у меня, используя формулу Excel в ручном режиме.

большое спасибо,

1

Решение

Я понимаю, что вопрос касался PHP, но когда я предложил VBScript, я подумал, что следующее может быть полезно, если вы решите использовать vbscript для форматирования отчетов. Несколько лет назад мне нужно было отформатировать отчет, который часто занимал более часа, и, поскольку измененные исходные данные нужно было бы снова запускать, я использовал vbscript и сократил время до минут (vb был намного сложнее, чем этот)

Я знаю, что приведенное ниже форматирование выглядит странно, в vbscript нет блочных комментариев, поэтому используется одиночная кавычка. Во всяком случае, надеюсь, что это может дать вам отправную точку.

Я думаю, что я хотел бы использовать Scripting Dictionary поддерживать количество потенциальных клиентов для каждого найденного пользователя. Полезное руководство по написанию скриптового словаря

OPTION EXPLICIT
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8'
Const XLS_SOURCEFILE="C:\data\spreadsheet.xls"
call processxls( 1, 2, XLS_SOURCEFILE, "Sheet1")

'
' the general idea is that you supply a column index ( iKeyCol )
' and so long as there is something in that cell for each row
' the script will run ( until it hits an empty cell )
'
' the `iKeyRow` is the row to start on - if you have column headers etc
' then after that row perhaps
'
' If you set the 3rd parameter to NULL when calling the sub you will be prompted to browse for the file to use.
'
'
'
'
Sub processxls( iKeyCol, iKeyRow, filename, sheetname )
Dim oExcel
Dim oXLWrkBook
Dim oXLSheet

Dim strFilename
Dim r: r = iKeyRow

'*** Get the source file ***
strFilename=getfile( filename )'*** Abandon if no sourcefile ***
If( strFilename=FALSE ) Then
Call KillObjects()
MsgBox "Cancelled"Exit Sub
End If'*** Create the excel object ***
Set oExcel = CreateObject("Excel.Application")
oExcel.Visible = True
oExcel.DisplayAlerts = True

Set oXLWrkBook = oExcel.Workbooks.Open(strFilename)
Set oXLSheet = oXLWrkBook.Worksheets(sheetname)

oXLSheet.Activate

Do While oXLSheet.Cells( r, iKeyCol ).value <> ""On Error Resume Next

'*** here is where you process your data in whatever manner you need
data=oXLSheet.Cells( r, iKeyCol ).value' increment row counter - otherwise boom!
r=r+1
loopoXLWrkBook.Save
oExcel.QuitCall KillObjects()MsgBox "All operations completed"End Sub
Function getfile( explicitpath )
if( isNull( explicitpath ) or explicitpath=false )then
Dim oShell:Set oShell = CreateObject( "WScript.Shell" )
If ( GetOSVersion() <= 5 ) Then
'*** Win XP & similar ***

Dim defaultLocalDir: defaultLocalDir = oShell.ExpandEnvironmentStrings("%USERPROFILE%") & "\Desktop"Set oShell = Nothing

Set cd = CreateObject("UserAccounts.CommonDialog")
cd.InitialDir = initialDir
cd.Filter = "All Files|*.*"cd.FilterIndex = 1

If cd.ShowOpen = True Then
getfile = cd.FileName
Else
getfile = ""End If

Set cd = Nothing

Else
'*** Vista onwards ***
Dim oExec:Set oExec = oShell.Exec( "mshta.exe ""about: <input type=file id=file><script>file.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(X.value);close();resizeTo(0,0);</script>""" )
getfile = Replace( oExec.StdOut.ReadAll, vbCRLF, "" )
Set oExec = Nothing
End If
else
getfile=explicitpath
end if

Set oShell = Nothing
End Function

Function GetOSVersion()
Dim oItem
Dim oWMI:Set oWMI = GetObject("winmgmts:\\.\root\CIMV2")
Dim Items:Set Items = oWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem",,48)
For Each oItem in Items
GetOSVersion = split( oItem.Version, "." )(0)
Next
End Function

Sub KillObjects()
If IsObject(oExcel) Then Set oExcel=nothing
If IsObject(oXLWrkBook) Then Set oXLWrkBook=nothing
If IsObject(oXLSheet) Then Set oXLSheet=nothing
If IsObject(oWMI) Then Set oWMI=nothing
End Sub
0

Другие решения

Использование сводных таблиц проще и быстрее

0

По вопросам рекламы [email protected]