簡體   English   中英

如何從 Android Studio 中的布局內容生成 CSV 文件

[英]How to generate CSV Files from the content of layout in Android Studio

我正在開發一個應用程序,我在 Android Studio 中使用 TableLayout 來顯示我的應用程序內的內容。 現在我需要從 android studio 中的 TableLayout 的內容生成 CSV 文件。 內容將從我的 SQLite 數據庫生成。 我嘗試從我的數據庫中生成 CSV。 但這行不通。 請告訴我如何從 Android Studio TableLayout 生成 CSV。

這是我的 DBHelper.Java 代碼

public class DBHelper extends SQLiteOpenHelper {

private static final int VERSION = 2;
public DBHelper(Context context) {
    super(context, DATABASE_NAME, null, VERSION);
}

//class table
public static final String DATABASE_NAME = "attendence.db";
public static final String CLASS_TABLE_NAME = "CLASS_TABLE";
public static final String C_ID = "_CID";
public static final String CLASS_NAME_KEY = "CLASS_NAME";
public static final String SUBJECT_NAME_KEY = "SUBJECT_NAME";

private static final String CREATE_CLASS_TABLE =
        "CREATE TABLE " + CLASS_TABLE_NAME + "( " +
                C_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
                CLASS_NAME_KEY + " TEXT NOT NULL, " +
                SUBJECT_NAME_KEY + " TEXT NOT NULL, " +
                "UNIQUE (" + CLASS_NAME_KEY + "," + SUBJECT_NAME_KEY + ")" +
                ");";

private static final String DROP_CLASS_TABLE = "DROP TABLE IF EXISTS " + CLASS_TABLE_NAME;
private static final String SELECT_CLASS_TABLE = "SELECT * FROM " + CLASS_TABLE_NAME;

//student table

private static final String STUDENT_TABLE_NAME = "STUDENT_TABLE";
public static final String S_ID = "_SID";
public static final String STUDENT_NAME_KEY = "STUDENT_NAME";
public static final String STUDENT_ROLL_KEY = "ROLL";

private static final String CREATE_STUDENT_TABLE =
        "CREATE TABLE " + STUDENT_TABLE_NAME +
                "( " +
                S_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
                C_ID + " INTEGER NOT NULL, " +
                STUDENT_NAME_KEY + " TEXT NOT NULL, " +
                STUDENT_ROLL_KEY + " INTEGER, " +
                " FOREIGN KEY ( " + C_ID + ") REFERENCES " + CLASS_TABLE_NAME + "(" + C_ID + ")" +
                ");";

private static final String DROP_STUDENT_TABLE = "DROP TABLE IF EXISTS " + STUDENT_TABLE_NAME;
private static final String SELECT_STUDENT_TABLE = "SELECT * FROM " + STUDENT_TABLE_NAME;


//STATUS TABLE

private static final String STATUS_TABLE_NAME = "STATUS_TABLE";
public static final String STATUS_ID = "_STATUS_ID";
public static final String DATE_KEY = "STATUS_DATE";
public static final String STATUS_KEY = "STATUS";

private static final String CREATE_STATUS_TABLE =
        "CREATE TABLE " + STATUS_TABLE_NAME +
                "(" +
                STATUS_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
                S_ID + " INTEGER NOT NULL, " +
                C_ID + " INTEGER NOT NULL, " +
                DATE_KEY + " DATE NOT NULL, " +
                STATUS_KEY + " TEXT NOT NULL, " +
                " UNIQUE (" + S_ID + "," + DATE_KEY + ")," +
                " FOREIGN KEY (" + S_ID + ") REFERENCES " + STUDENT_TABLE_NAME + "( " + S_ID + ")," +
                " FOREIGN KEY (" + C_ID + ") REFERENCES " + CLASS_TABLE_NAME + "( " + C_ID + ")" +
                ");";
private static final String DROP_STATUS_TABLE = "DROP TABLE IF EXISTS " + STATUS_TABLE_NAME;
private static final String SELECT_STATUS_TABLE = "SELECT * FROM " + STATUS_TABLE_NAME;

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(CREATE_CLASS_TABLE);
    db.execSQL(CREATE_STUDENT_TABLE);
    db.execSQL(CREATE_STATUS_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    try {
        db.execSQL(DROP_CLASS_TABLE);
        db.execSQL(DROP_STUDENT_TABLE);
        db.execSQL(DROP_STATUS_TABLE);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

long addClass(String className,String subjectName){
    SQLiteDatabase database = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(CLASS_NAME_KEY,className);
    values.put(SUBJECT_NAME_KEY,subjectName);

    return database.insert(CLASS_TABLE_NAME,null,values);
}

Cursor getClassTable(){
    SQLiteDatabase database = this.getReadableDatabase();

    return database.rawQuery(SELECT_CLASS_TABLE,null);
}

int deleteClass(long cid){
    SQLiteDatabase database = this.getReadableDatabase();
    return database.delete(CLASS_TABLE_NAME,C_ID+"=?",new String[]{String.valueOf(cid)});
}

long updateClass(long cid,String className,String subjectName){
    SQLiteDatabase database = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(CLASS_NAME_KEY,className);
    values.put(SUBJECT_NAME_KEY,subjectName);

    return database.update(CLASS_TABLE_NAME,values,C_ID+"=?",new String[]{String.valueOf(cid)});
}

long addStudent(long cid,int roll,String name){
    SQLiteDatabase database = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(C_ID,cid);
    values.put(STUDENT_ROLL_KEY,roll);
    values.put(STUDENT_NAME_KEY,name);
    return database.insert(STUDENT_TABLE_NAME,null,values);
}

Cursor getStudentTable(long cid){
    SQLiteDatabase database = this.getReadableDatabase();
    return database.query(STUDENT_TABLE_NAME,null,C_ID+"=?",new String[]{String.valueOf(cid)},null,null,STUDENT_ROLL_KEY);
}

int deleteStudent(long sid){
    SQLiteDatabase database = this.getReadableDatabase();
    return database.delete(STUDENT_TABLE_NAME,S_ID+"=?",new String[]{String.valueOf(sid)});
}

long updateStudent(long sid,String name){
    SQLiteDatabase database = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(STUDENT_NAME_KEY,name);
    return database.update(STUDENT_TABLE_NAME,values,S_ID+"=?",new String[]{String.valueOf(sid)});
}

long addStatus(long sid,long cid, String date, String status){
    SQLiteDatabase database = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(S_ID,sid);
    values.put(C_ID,cid);
    values.put(DATE_KEY,date);
    values.put(STATUS_KEY,status);
    return database.insert(STATUS_TABLE_NAME,null,values);
}

long updateStatus(long sid,String date,String status){
    SQLiteDatabase database = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(STATUS_KEY,status);
    String whereClause = DATE_KEY +"='"+date+"' AND "+S_ID+"="+sid;
    return database.update(STATUS_TABLE_NAME,values,whereClause,null);
}
String getStatus(long sid, String date){
    String status=null;
    SQLiteDatabase database = this.getReadableDatabase();
    String whereClause = DATE_KEY +"='"+date+"' AND "+S_ID+"="+sid;
    Cursor cursor = database.query(STATUS_TABLE_NAME,null,whereClause,null,null,null,null);
    if(cursor.moveToFirst()) {
        status = cursor.getString(cursor.getColumnIndex(STATUS_KEY));
    }
    return status;
}

Cursor getDistinctMonths(long cid){
    SQLiteDatabase database = this.getReadableDatabase();
    return database.query(STATUS_TABLE_NAME,new String[]{DATE_KEY},C_ID+"="+cid,null,"substr("+DATE_KEY+",4,7)",null,null);//23.01.2022
}

}

這是我的 btnExport 代碼:-

 btnExport.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View view) {
            String directory_path = Environment.getExternalStorageDirectory().getPath() + "/Project Brown/";
            File file = new File(directory_path);
            if (!file.exists()) {
                file.mkdirs();
            }
            // Export SQLite DB as EXCEL FILE
            SQLiteToExcel sqliteToExcel = new SQLiteToExcel(getApplicationContext(), DBHelper.DATABASE_NAME, directory_path);
            sqliteToExcel.exportAllTables("users.xls", new SQLiteToExcel.ExportListener() {
                @Override
                public void onStart() {

                }

                @Override
                public void onCompleted(String filePath) {
                    Toast.makeText(SheetActivity.this, "Excel Exported", Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onError(Exception e) {

                }
            });
        }
    });

對於 CSV 文件(不是 excel 文件,盡管 excel 將讀取 ZCC8D68C551C4A9DAF6D5313DZDE 文件)

添加到 build.gradle 文件

implementation 'org.apache.commons:commons-csv:1.8'

然后下面應該生成一個 CSV 文件的任何查詢返回Cursor object。

(在下面的示例中,這只是 output 完整的“類”表,但可用於 output 以及任何其他表或任何其他查詢,包括表的連接)

該示例將獲取文件描述符留給用戶,因為如何執行此操作取決於文件的保存位置以及使用的 Android 版本。

try{

    // Getting a file descriptor is up to the user,
    // depend on where and what Android version

    FileWriter fileWriter = new FileWriter(fileDescriptor);

    CSVPrinter printer = new CSVPrinter(fileWriter, CSVFormat.DEFAULT);

    // Get the results of the query from users code
    Cursor cursor = getClassTable();

    // Add column names as first line
    // but as the name might not be proper CSV header names
    // Just output them as plain "data"
    printer.printRecord(cursor.getColumnNames());

    cursor.moveToFirst();
    do {
        // Iterate over columns
        for ( int column = 0; column < cursor.getColumnCount() ; column++) {
           printer.print(cursor.getString(column));
        }
        // Finish line
        printer.println();
    } while(cursor.moveToNext());

    fileWriter.close();

} catch (Exception e) {
   Log.e("bebug", "Exception:" + e.toString());
}

請注意,這未經測試,但它是使用 Apache Commons CSV 的通用版本,基於我在我的應用程序中創建的 csv 數據文件的操作,該文件也以表格布局類型格式顯示。

完整文檔位於https://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/CSVPrinter.ZFC35FDC70D5FC69D769883A82E2C

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM