乐于分享
好东西不私藏

C#中使用Excel对象模型

C#中使用Excel对象模型

本文讨论如何在C#代码中通过Excel对象模型写入和读取Excel数据,并封装相关代码。

引用Excel对象库

Visual Studio中,可以在“解决方案资源管理器”>>“引用”的右键菜单选择“添加引用”,在打开的“引用管理器”中,选中“COM”页,选中列表中的“Microsoft Excel 16.0 Object Library”项,然后点击右下角的“安装”按钮完成引用。这里,16.0是版本号,表示Excel2016,不同计算机中显示的数字可能不同,但不会影响本文代码的测试。

##引用Excel对象库

将数据写入新的Excel文件

使用Excel对象模型写入Excel数据的代码封装在cfx/msoffice/tExcelWriter.cs文件,先看如下的代码。

C#

using System.IO;

using Microsoft.Office.Interop.Excel;

namespace cfx.msoffice

{

public class tExcelWriter

{

private string myFileName;

private System.Data.DataTable myData;

private string mySheetName;

private int myBeginRow;

private int myBeginColumn;

private bool myWriteColumnName;

//

private tExcelWriter() { }

//

public static tExcelWriter Create(string filename,

System.Data.DataTable data,   string sheetName = null,

int beginRow = 1, int beginCol =   1,

bool writeColumnName = true)

{

return new tExcelWriter()

{

myFileName = filename,

myData = data,

mySheetName = sheetName,

myBeginRow = beginRow,

myBeginColumn = beginCol,

myWriteColumnName =   writeColumnName

};

}

//

public bool Write()

{

if (myData == null ||   myData.Columns.Count == 0) 

return false;

//

if (File.Exists(myFileName))

File.Delete(myFileName);

// 

if (mySheetName == null ||   mySheetName.Trim().Length == 0)

mySheetName = "数据";

//

Application xapp = new   Application();

xapp.Visible = false;

Workbook wb =   xapp.Workbooks.Add();

Worksheet ws =   wb.Worksheets.Add();

ws.Name = mySheetName;

//

int curRow = myBeginRow;

// 写入列名行

if (myWriteColumnName)

{

for(int col = 0; col <   myData.Columns.Count; col++)

{

int cellCol = col +   myBeginColumn;

ws.Cells[curRow,   cellCol].Value = 

myData.Columns[col].ColumnName;

}

curRow++;

}

// 写入数据

for(int row = 0; row <   myData.Rows.Count; row++)

{

for(int col = 0; col <   myData.Columns.Count; col++)

{

int cellCol = col +   myBeginColumn;

ws.Cells[curRow,   cellCol].Value =

myData.Rows[row][col];

}

curRow++;

}

//

string ext =   Path.GetExtension(myFileName).ToLower();

if (ext == ".xls")// excel97

wb.SaveAs(myFileName,   XlFileFormat.xlExcel8);

else

wb.SaveAs(myFileName);

wb.Close();

xapp.Quit();

return true;

}

}

}

代码中,在cfx.msoffice命名空间中创建了tExcelWriter类,其中的私有字段和Create()静态方法的参数相对应,下面以方法的参数说明其含义。

  • filename,指定要写入的Excel文件路径。指定的文件已存在时会先删除。

  • data,定义包含写入数据的System.Data.DataTable对象。因为Excel对象模型中也有DataTable类型,所以,这里使用了类型的完整路径。

  • sheetName,指定写入工作表的名称。默认为null,此时会使用“数据”。

  • beginRowbeginCol,指定开始写入数据的单元格行号和列号。请注意,Excel对象模型中的工作表索引、行号、列号都是从1开始的。

  • writeColumnNamebool类型,指定是否将DataTable中的列名写入第一行数据,默认为true

接下来的Write()方法会执行写入操作,其中,主要使用了ApplicationWorkbookWorksheet等类型的Excel对象,下面分别讨论。

Application对象(xapp),表示Excel应用程序,方法中首先创建了一个新的应用实例,然后将Visible属性设置为false,即不显示Excel应用界面。如果想观察Excel的操作,也可以将其设置为true(默认值)。对象中的Workbooks属性表示应用处理的工作簿集合。

Workbook对象(wb)表示一个工作簿,方法中,使用应用对象Workbooks集合的Add()方法添加一个新的工作簿,并返回对象。工作簿对象的Worksheets属性表示工作簿中处理的工作表集合。

Worksheet对象(ws)表示一个工作表,方法中使用工作簿对象Worksheets集合的Add()方法添加一个新的工作表,并返回对象。添加工作表后,使用Name属性指定工作表的名称。从Worksheets集合获取已存在的工作表对象时,可以使用从1开始的索引或工作表名称作为索引。

获取写入单元格(区域)时使用了工作表对象的Cells属性,其索引分别是行号和列号,其中,行号是从1开始的索引,列号可以使用从1开始的索引,也可以使用字母作为索引,实际工作中使用数值索引会更加直观。使用行号和列号返回的类型为Range对象,使用其中的Value属性可以设置或读取单元格区域的数据。

数据写入完成后,会通过文件扩展名判断写入的文件类型,如果扩展名为.xls则保存为Excel97格式;否则保存为Excel对象库当前版本的默认格式。

工作簿的SaveAs()方法可以将Excel文件保存到指定的路径,这里保存为myFileName字段指定的位置。方法的第二个参数可以指定保存的文件类型,其中XlFileFormat.xlExcel8枚举值表示Excel 8,即Excel97格式的文件。

保存数据后,使用工作簿对象的Close()方法关闭Excel文件,使用Application对象的Quit()方法退出当前Excel应用实例。

正确处理Excel数据写入后,方法会返回true

测试完成后,确认代码无误可以在Write()方法中添加try...catch结构,防止实际工作中出现异常时,会将异常直接抛出,导致应用意外终止。

下面的代码,在Program.cs文件中测试Excel写入操作。

C#

using System;

using System.Data;

using cfx.msoffice;

namespace csfx_demo

{

class Program

{

static void Main(string[] args)

{

DataTable data =   tApp.DbJet.GetTable("select * from t1");

bool result =   tExcelWriter.Create(@"d:\tmp.xlsx", data).Write();

Console.WriteLine(result);

}

}

}

代码中,首先从t1表中读取全部数据;然后写入到d:\tmp.xlsx文件中,正确执行会显示True。这里,可以修改tExcelWriter.Create()方法的参数来观察数据写入的效果。

将数据写入已存在的Excel文件

下面的代码(cfx/msoffice/tExcelWriter.cs),在tExcelWriter类中创建WriteExisted()方法,用于将数据写入已存在的Excel文件。

C#

using System.IO;

using Microsoft.Office.Interop.Excel;

namespace cfx.msoffice

{

public class tExcelWriter

{

// 其它代码

//

public bool WriteExisted()

{

if (myData == null ||   myData.Columns.Count == 0)

return false;

//

if (File.Exists(myFileName) ==   false)

return false;

//

Application xapp = new   Application();

xapp.Visible = false;

Workbook wb =   xapp.Workbooks.Open(myFileName);

//

Worksheet ws = null;

for(int i = 1; i <=   wb.Worksheets.Count; i++)

{

if (wb.Worksheets[i].Name ==   mySheetName)

ws = wb.Worksheets[i];

}

if (ws == null)

{

ws = wb.Worksheets.Add();

}

//

int curRow = myBeginRow;

// 写入列名行

if (myWriteColumnName)

{

for (int col = 0; col <   myData.Columns.Count; col++)

{

int cellCol = col +   myBeginColumn;

ws.Cells[curRow,   cellCol].Value = 

myData.Columns[col].ColumnName;

}

curRow++;

}

// 写入数据

for (int row = 0; row <   myData.Rows.Count; row++)

{

for (int col = 0; col <   myData.Columns.Count; col++)

{

int cellCol = col +   myBeginColumn;

ws.Cells[curRow,   cellCol].Value =

myData.Rows[row][col];

}

curRow++;

}

//

wb.Save();

wb.Close();

xapp.Quit();

return true;

}

}

}

将数据写入已存在的Excel文件时,首先使用Excel应用(Application)对象Workbooks集合的Open()方法打开文件,其参数为文件的路径。

确定工作表时,如果mySheetName字段包含了有效的工作表,则打开此工作表,否则,将在文件中创建一个新的工作表,并使用默认名称,如Sheet1Sheet2Sheet3、……。

写入数据后,直接调用工作簿(Workbook)对象的Save()方法保存文件。并且要关闭工作簿、退出应用。操作成功后,最后返回true值。

下面的代码,在Program.cs文件中测试tExcelWriter.WriteExistsed()方法的应用。

C#

using System;

using System.Data;

using cfx.msoffice;

namespace csfx_demo

{

class Program

{

static void Main(string[] args)

{

DataTable data =   tApp.DbJet.GetTable("select * from t1");

bool result =   tExcelWriter.Create(@"d:\tmp.xlsx", data, "Sheet1")

.WriteExisted();

Console.WriteLine(result);

}

}

}

代码会将t1表的数据写入d:\tmp.xlsx文件的Sheet1工作表。

下面的代码(cfx/msoffice/tExcelWriter.cs),在tExcelWriter类中添加WriteByTemplate()方法,用于将数据写入模板文件。

C#

using System.IO;

using Microsoft.Office.Interop.Excel;

namespace cfx.msoffice

{

public class tExcelWriter

{

// 其它代码

//

public bool WriteByTemplate(string template)

{

try

{

if (File.Exists(template) ==   false)

return false;

File.Copy(template,   myFileName, true);

return WriteExisted();

}

catch { return false; }

}

//

}

}

WriteExists()方法的参数需要指定模板文件的路径;方法中,首先会将模板文件复制到指定的位置(myFileName),然后调用WriteExisted()方法写入数据。

读取Excel数据

下面的代码(cfx/msoffice/tExcelReader.cs)会创建tExcelReader类,用于读取Excel文件中指定工作表的数据。

C#

using System.IO;

using System.Data;

using Microsoft.Office.Interop.Excel;

namespace cfx.msoffice

{

public class tExcelReader

{

// Excel文件名

private string myFileName;

// 读取式作表索引

private int mySheetIndex;

// 如果设置工作表名称,则优先使用

private string mySheetName;

// 开始读取数据的行和列

private int myBeginColumn;

private int myBeginRow;

// 第一行作为列名

private bool myFirstRowAsColumnName;

// 读取的行数,大于0时有效,否则读取全部

private int myReadRowCount;

//

private tExcelReader() { }

//

public static tExcelReader Create(string filename,

int sheetIndex = 1, string   sheetName = null,

int beginRow = 1, int beginCol =   1,

bool firstRowAsColName = true,   int readRowCount = -1)

{

return new tExcelReader()

{

myFileName = filename,

mySheetIndex = sheetIndex,

mySheetName = sheetName,

myBeginRow = beginRow,

myBeginColumn = beginCol,

myFirstRowAsColumnName =   firstRowAsColName,

myReadRowCount = readRowCount

};

}

//

public System.Data.DataTable Read()

{

if (File.Exists(myFileName) ==   false)

return null;

//

Application xapp = new   Application();

xapp.Visible = false;

Workbook wb =   xapp.Workbooks.Open(myFileName);

//

Worksheet ws = null;

for (int i = 1; i <=   wb.Worksheets.Count; i++)

{

if (wb.Worksheets[i].Name ==   mySheetName)

ws = wb.Worksheets[i];

}

if (ws == null)

{

if (mySheetIndex >= 1   && mySheetIndex <= wb.Worksheets.Count)

ws =   wb.Worksheets[mySheetIndex];

else

ws = wb.Worksheets[1];

}

// 

System.Data.DataTable data = new   System.Data.DataTable();

// 创建列

for (int col = myBeginColumn;

col <=   ws.UsedRange.Columns.Count; col++)

data.Columns.Add();

// 读取数据

int rowCounter = 0;

for(int row = myBeginRow; 

row <=   ws.UsedRange.Rows.Count; row++)

{

DataRow newRow =   data.NewRow();

for(int col = myBeginColumn; 

col <=   ws.UsedRange.Columns.Count; col++)

{

int colIndex = col -   myBeginColumn;

newRow[colIndex] =   ws.Cells[row, col].Value;

}

data.Rows.Add(newRow);

//

rowCounter++;

if (myReadRowCount > 0   && rowCounter == myReadRowCount)

break;

}

// 第一行提升为列名

if (myFirstRowAsColumnName)

{

string sName;

for (int col = 0; col <   data.Columns.Count; col++)

{

sName =   data.Rows[0][col].ToString().Trim();

if (sName !=   "")

data.Columns[col].ColumnName = sName;

}

data.Rows.RemoveAt(0);

}

//

wb.Close();

xapp.Quit();

//

return data;

}

//

}

}

tExcelReader类中首先定义了一些私有字段,Create()静态方法的参数与这些字段相对应,下面通过参数说明其含义。

  • filename,指定读取的Excel文件路径。

  • sheetIndex,指定读取的工作表索引,默认1,表示第一个工作表。如果指定的工作表索引不存在,同样读取第一个工作表。

  • sheetNamestring类型,指定读取的工作表名称,默认为null。如果指定了有效的工作表名称则读取此工作表数据,如果指定的工作表名称不存在,则通过数值索引读取工作表。

  • beginRowbeginCol,指定开始读取数据的单元格的行号和列号(从开始)。

  • firstRowAsColName,是否将第一行数据作为DataTable对象中的列名,默认为true

  • readRowCountint类型,指定读取多少行数据,默认为-1,表示读取全部数据。大于0时指定最多读取的记录数量。

Read()方法中,首先通过Excel应用(Application)对象Workbooks集合的Open()方法打开Excel文件,并返回工作簿(Workbook)对象;然后根据工作表名称或数值索引打开工作表(Worksheet)对象。

需要注意的是,工作表(Workbook)对象的UsedRange属性表示实际使用的数据区域,其中的Rows属性表示数据行集合,Columns属性表示数据列集合,可以使用它们的Count属性获取工作表中数据实际使用的行数和列数。此外,行和列的索引是从1开始的。

接下来,会将数据读取到DataTable对象,并使用rowCounter变量作为读取行的计数,达到指定的行数时会停止读取。

将第一行作为DataTable对象的列名时,会将第一行的数据设置为对应列的列名,然后从DataTable对象的数据中删除第一行(索引0

操作完成后需要关闭工作簿,并退库Excel应用。最后返回包含读取数据的DataTable对象。

下面的代码,在Program.cs文件中测试读取Excel数据的操作。

C#

using System;

using System.Data;

using System.IO;

using cfx.data;

using cfx.msoffice;

namespace csfx_demo

{

class Program

{

static void Main(string[] args)

{

DataTable data =   tExcelReader.Create(@"d:\tmp.xlsx",

sheetName: "数据")

.Read();

string s =   tDataHelper.ToHtmlTable(data);

File.WriteAllText(@"d:\tmp.html", s);

}

}

}

代码会读取d:\tmp.xlsx文件中“数据”工作表的数据,然后将数据写入d:\tmp.html文件,可以使用浏览器查看读取的数据。

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-12 15:33:21 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/926885.html
  2. 运行时间 : 0.270068s [ 吞吐率:3.70req/s ] 内存消耗:4,547.04kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=71f8da96c6a1d1fd1d89b5e5c346b28a
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 4.22 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.11 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000967s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001611s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000692s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000665s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001310s ]
  6. SELECT * FROM `set` [ RunTime:0.000594s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001409s ]
  8. SELECT * FROM `article` WHERE `id` = 926885 LIMIT 1 [ RunTime:0.001126s ]
  9. UPDATE `article` SET `lasttime` = 1786520002 WHERE `id` = 926885 [ RunTime:0.047898s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000737s ]
  11. SELECT * FROM `article` WHERE `id` < 926885 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001267s ]
  12. SELECT * FROM `article` WHERE `id` > 926885 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.008705s ]
  13. SELECT * FROM `article` WHERE `id` < 926885 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.006328s ]
  14. SELECT * FROM `article` WHERE `id` < 926885 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.009713s ]
  15. SELECT * FROM `article` WHERE `id` < 926885 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001529s ]
0.273832s