快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

澳门威尼人斯网站0709:使用C读取Word表格数据



近来在做一个项目,应用到了读取Word表格中内容的技巧。在网上找了许多资料都不尽人意,着末收拾了并改动了一些网上的代码,取其英华去其糟粕,现将代码同各位园子里的同伙们分享。

读取Word表格数据的措施

1//将读取Word表格封装与措施中。

2public string ReadWord(string fileName, int rowIndex, int colIndex)

3{

4  ApplicationClass cls = null;

5  Document doc = null;

6

7  Table table = null;

8  object missing = Missing.Value;

9

10  object path = fileName;

11  cls = new ApplicationClass();

12

13  try

14  {

15    doc = cls.Documents.Open

16      (ref path, ref missing, ref missing, ref missing,

17      ref missing, ref missing, ref missing, ref missing,

18      ref missing, ref missing, ref missing, ref missing,

19      ref missing, r澳门威尼人斯网站0709ef missing, ref missing, ref missing);

20    table = doc.Tables[1];

21    string text = table.Cell(rowIndex, colIndex).Range.T澳门威尼人斯网站0709ext.ToString();

22    text = text.Substring(0, text.Length - 2);  //去除尾部的mark

23    return text;

24  }

25  catch (Exception澳门威尼人斯网站0709 ex)

26  {

27

28    return ex.Message;

29  }

30  finally

31  {

32    if (doc != null)

33      doc.Close(ref missing, ref missing, ref missing);

34    cls.Quit(ref missing, ref missing, ref missing);

35  }

36}

这个措施用于读取Word表格中某个单元格的数据。此中的参数分手为文件名(包括路径),行号,列号。

因为斟酌到代码复用,我将代码写成了一个类。此外,经由过程核阅代码可以发明,假如要多次读取同一文件中的不合的单元格数据会造成频繁的打开、关闭Word法度榜样;是以,我将代码进行优化。在我做优化的时刻忽然想起来ADO.NET的SqlConnection和SqlCommand类。这两个类我经常用做数据库操作,一样平常用到的措施顺序都是:打开数据库连接,履行数据库查询,关闭数据库连接。我没有应用到两个类,我将这段代码封装于一个类中。应用Open、Close节制Word文档的打开和关闭,应用WordTableRead措施读取表格中的数据。这样对付读取多个单元格中的数据,每次只必要打开、关闭一次Word法度榜样即可,大年夜大年夜的节约了资本的开销和节省了光阴,前进的读取效率。此外,对付代码的优化还有可以读取指定表格中数据。下图显示了这个类的布局,代码及响应注释附在图的下方:

class WordTableRead

2{

3  private string fileName;

4  private ApplicationClass cls = null;

5  private Document doc = null;

6  private Table table = null;

7  private object missing = Missing.Value;

8  //Word是否处于打开状态

9  private bool openState;

10

11

12  /**////

13  /// 自定义构造措施

14  ///

15  ///

包孕路径的文件名

16  public WordTableRead(string fileName)

17  {

18    this.fileName = fileName;

19  }

20

21  /**////

22  /// 打开Word文档

23  ///

24  public void Open()

25  {

26    object path = fileName;

27    cls = new ApplicationClass();

28    try

29    {

30      doc = cls.Documents.Open

31        (ref path, ref missing, ref missing, ref missing,

32        ref missing, ref澳门威尼人斯网站0709 missing, ref missing, ref missing,

33        ref missing, ref missing, ref missing, ref missing,

34        ref missing, ref missing, ref missing, ref missing);

35      openState = true;

36    }

37    catch

38    {

39      openState = false;

40    }

41  }

42

43  /**////

44  /// 返回指定单元格中的数据

45  ///

46  ///

表格号

47  ///

行号

48  ///

列号

49  /// 单元格中的数据

50  public string ReadWord(int tableIndex, int rowIndex, int colIndex)

51  {

52    //Give the value to the tow Int32 params.

53

54    try

55    {

56      if (openState == true)

57      {

58        table = doc.Tables[tableIndex];

59        string text = table.Cell(rowIndex, colIndex).Range.Text.ToString();

60        text = text.Substring(0, text.Length - 2);  //去除尾部的mark

61        return text;

62      }

63      else

64      {

65        return "";

66      }

67    }

68    catch

69    {

70 澳门威尼人斯网站0709     return "Error";

71    }

72  }

73

74  /**////

75  /// 关闭Word文档

76  ///

77  public void Close()

78  {

79    if (openState == true)

80    {

81      if (doc != null)

82        doc.Close(ref missing, ref missing, ref missing);

83      cls.Quit(ref missing, ref missing, ref missing);

84    }

85  }

86}

只管如斯,我照样觉得这个类的设计仍旧存在缺陷。每次测试这个类的时刻,感到数据读取的速率不是很令我知足;而且,这个类用于节制台利用法度榜样的时刻不会在屏幕上看到任何值,不明白应该若何改进代码。盼望同伙们能够给我供给一些改进此类的建议。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: