• C#读写Excel


    //-----------------------------------------------------------------------
    //  This file is part of the Microsoft .NET Framework SDK Code Samples.
    // 
    //  Copyright (C) Microsoft Corporation.  All rights reserved.
    // 
    //This source code is intended only as a supplement to Microsoft
    //Development Tools and/or on-line documentation.  See these other
    //materials for detailed information regarding Microsoft code samples.
    // 
    //THIS CODE AND INFORMATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY
    //KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
    //IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
    //PARTICULAR PURPOSE.
    //-----------------------------------------------------------------------
    using System;
    using System.Reflection; // For Missing.Value and BindingFlags
    using System.Runtime.InteropServices; // For COMException
    using Microsoft.Office.Interop.Excel;
    
    class AutoExcel {
    	public static int Main() {
    	
    		Console.WriteLine ("Creating new Excel.Application");
    		Application app = new Application();
    		if (app == null) {
    			Console.WriteLine("ERROR: EXCEL couldn't be started!");
    			return 0;
    		}
    		
    		Console.WriteLine ("Making application visible");		
    		app.Visible = true;
    		
    		Console.WriteLine ("Getting the workbooks collection");
    		Workbooks workbooks = app.Workbooks;
    
    		Console.WriteLine ("Adding a new workbook");
    		
    		_Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
    
    		Console.WriteLine ("Getting the worksheets collection");
    		Sheets sheets = workbook.Worksheets;
    
    		_Worksheet worksheet = (_Worksheet) sheets.get_Item(1);
    		if (worksheet == null) {
    			Console.WriteLine ("ERROR: worksheet == null");
    		}
    		
    		Console.WriteLine ("Setting the value for cell");
    		
    		// This paragraph puts the value 5 to the cell G1
    	    Range range1 = worksheet.get_Range("G1", Missing.Value);
    		if (range1 == null) {
    			Console.WriteLine ("ERROR: range == null");
    		}
    		const int nCells = 5;
    		range1.Value2 = nCells;
    		
    		// This paragraph sends single dimension array to Excel
    	    Range range2 = worksheet.get_Range("A1", "E1");
    		int[] array2 = new int [nCells];
    		for (int i=0; i < array2.GetLength(0); i++) {
    			array2[i] = i+1;
    		}
    		range2.Value2 = array2;
    
    		// This paragraph sends two dimension array to Excel
    	    Range range3 = worksheet.get_Range("A2", "E3");
    		int[,] array3 = new int [2, nCells];
    		for (int i=0; i < array3.GetLength(0); i++) {
    			for (int j=0; j < array3.GetLength(1); j++) {
    				array3[i, j] = i*10 + j;
    			}
    		}
    		range3.Value2 = array3;
    
    		// This paragraph reads two dimension array from Excel
    	    Range range4 = worksheet.get_Range("A2", "E3");
    		Object[,] array4;
    		array4 = (Object[,])range4.Value2;
    		
    		for (int i=array4.GetLowerBound(0); i <= array4.GetUpperBound(0); i++) {
    			for (int j=array4.GetLowerBound(1); j <= array4.GetUpperBound(1); j++) {
    				if ((double)array4[i, j] != array3[i-1, j-1]) {
    					Console.WriteLine ("ERROR: Comparison FAILED!");
    					return 0;
    				}
    			}
    		}
    
    		// This paragraph fills two dimension array with points for two curves and sends it to Excel
    	    Range range5 = worksheet.get_Range("A5", "J6");
    		double[,] array5 = new double[2, 10];
    		for (int j=0; j < array5.GetLength(1); j++) {
    			double arg = Math.PI/array5.GetLength(1) * j;
    			array5[0, j] = Math.Sin(arg);
    			array5[1, j] = Math.Cos(arg);
    		}
    		range5.Value2 = array5;
    		
    		// The following code draws the chart
    		range5.Select();
    		ChartObjects chartobjects = (ChartObjects) worksheet.ChartObjects(Missing.Value);
    		
    		ChartObject chartobject = (ChartObject) chartobjects.Add(10 /*Left*/, 100 /*Top*/, 450 /*Width*/, 250 /*Height*/);
    		_Chart chart = (_Chart) chartobject.Chart;
    		
    		// Call to chart.ChartWizard() is shown using late binding technique solely for the demonstration purposes
    		Object[] args7 = new Object[11];
    		args7[0] = range5; // Source
    		args7[1] = XlChartType.xl3DColumn; // Gallery
    		args7[2] = Missing.Value; // Format
    		args7[3] = XlRowCol.xlRows; // PlotBy
    		args7[4] = 0; // CategoryLabels
    		args7[5] = 0; // SeriesLabels
    		args7[6] = true; // HasLegend
    		args7[7] = "Sample Chart"; // Title
    		args7[8] = "Sample Category Type"; // CategoryTitle
    		args7[9] = "Sample Value Type"; // ValueTitle
    		args7[10] = Missing.Value; // ExtraTitle
    		chart.GetType().InvokeMember("ChartWizard", BindingFlags.InvokeMethod, null, chart, args7);
    	    
    		Console.WriteLine ("Press ENTER to finish the sample:");
    		Console.ReadLine();		
    		
    		try {
    			// If user interacted with Excel it will not close when the app object is destroyed, so we close it explicitely
    			workbook.Saved = true;
    			app.UserControl = false;
    			app.Quit();
    		} catch (COMException) {
    			Console.WriteLine ("User closed Excel manually, so we don't have to do that");
    		}
    		
    		Console.WriteLine ("Sample successfully finished!");
    		return 100;
    	}
    }
    
  • 相关阅读:
    解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xyfer.dao.UserDao.findById
    Oracle使用MyBatis中RowBounds实现分页查询
    普元EOS开发经验总结——不定期持续更新中
    Vue数据列表倒计时展示
    Java后端学习路线
    Linux下命令行安装WebLogic 10.3.6
    Oracle快速运行一指禅
    maven学习知识点汇总
    EOS下控制台以及图形界面打印sql语句
    Myeclipse使用过程配置汇总
  • 原文地址:https://www.cnblogs.com/CUCmehp/p/1316548.html
Copyright © 2020-2023  润新知